计算化学公社

标题: 写了一个小脚本利用Multiwfn转换文件失败 [打印本页]

作者
Author:
星斗如盘    时间: 2021-7-7 17:44
标题: 写了一个小脚本利用Multiwfn转换文件失败
本帖最后由 星斗如盘 于 2021-7-7 20:33 编辑

写了一个小脚本想利用Multiwfn把log文件转为gjf文件,根据参数确定转换类型,生成Multiwfn的参数文件setting.txt,但是并没有gjf文件生成。如果自己额外提供参数文件setting.txt则可以转换,似乎脚本本身生成的参数文件setting.txt无法传递给脚本调用Multiwfn
脚本内容如下:
@echo off
echo 根据参数确定转换类型
echo 参数1:log文件转gjf文件
set /p var=请输入参数:
if %var%==1 goto :1
:1
echo 100 > setting.txt
echo 2 >> setting.txt
echo 10 >> setting.txt
pause
for /f %%i in ('dir *.log /b') do (
Multiwfn %%i <setting.txt >nul
)
pause

——————
@lyj714提供的脚本十分方便

作者
Author:
心向暖阳    时间: 2021-7-7 17:49
echo -e '100\n2\n10' | Multiwfn *.log
作者
Author:
星斗如盘    时间: 2021-7-7 18:17
本帖最后由 星斗如盘 于 2021-7-7 18:53 编辑
心向暖阳 发表于 2021-7-7 17:49
echo -e '100\n2\n10' | Multiwfn *.log
好像不行,显示:
"-e '100\n2\n10" cannot be found, input again
forrtl: 管道已结束。
forrtl: severe (24): end-of-file during read, unit -4, file CONIN$

作者
Author:
wzkchem5    时间: 2021-7-7 18:31
星斗如盘 发表于 2021-7-7 11:17
好像不行呀?具体的脚本怎么样的呢?

不要只说不行,要给出具体的、完整的报错信息
作者
Author:
星斗如盘    时间: 2021-7-7 18:53
本帖最后由 星斗如盘 于 2021-7-7 18:56 编辑
wzkchem5 发表于 2021-7-7 18:31
不要只说不行,要给出具体的、完整的报错信息

好像不行,显示:
"-e '100\n2\n10" cannot be found, input again
forrtl: 管道已结束。
forrtl: severe (24): end-of-file during read, unit -4, file CONIN$
我使用的是bat脚本window系统,不是linux系统

作者
Author:
wzkchem5    时间: 2021-7-7 19:15
星斗如盘 发表于 2021-7-7 11:53
好像不行,显示:
"-e '100\n2\n10" cannot be found, input again
forrtl: 管道已结束。

echo -e这个写法只有在linux下可用
作者
Author:
星斗如盘    时间: 2021-7-7 19:27
wzkchem5 发表于 2021-7-7 19:15
echo -e这个写法只有在linux下可用

Multiwfn传递参数的方法有几种呢?
作者
Author:
lyj714    时间: 2021-7-7 19:47
  1. @echo off
  2. echo 根据参数确定转换类型
  3. echo 参数1:log文件转gjf文件
  4. set /p var=请输入参数:
  5. if %var%==1 goto :1
  6. :1
  7. echo 100 > setting.txt
  8. echo 2   >> setting.txt
  9. echo 10  >> setting.txt
  10. echo.    >> setting.txt
  11. echo 0   >> setting.txt
  12. echo q   >> setting.txt
  13. for /f %%i in ('dir *.log /b') do (
  14. Multiwfn %%i < setting.txt >nul
  15. )
  16. pause
复制代码

作者
Author:
星斗如盘    时间: 2021-7-7 20:16
本帖最后由 星斗如盘 于 2021-7-7 20:32 编辑
lyj714 发表于 2021-7-7 19:47

非常感谢,我看相当于多加了三行:
echo.    >> setting.txt
echo 0   >> setting.txt
echo q   >> setting.txt
这有什么区别呢?
因为如果不是临时生成setting.txt文件,而是直接提供setting.txt,是可以运行的
——————
已经弄明白了,直接提供的setting.txt里面有更多的换行符,所以误打误撞可以正确输出结果文件,还是您的脚本更方便,&#128077;&#128077;&#128077;

作者
Author:
snljty    时间: 2021-7-7 20:23
本帖最后由 snljty 于 2021-7-7 20:25 编辑

如果只是当前目录下,其实没必要用for /f。把for /f %%i in (`dir *.log /b`)改成for %%i in (*.log)也可以。

不贴报错信息让别人猜或者还得自己跑一遍是不好的。能看出来你的脚本有个问题是echo 2>> setting.txt这行。你想的是往setting.txt里面追加一行2,但实际上这个2会被解释为文件描述符2,也就是标准错误流(stderr)。这行命令就变成了echo,也就是显示当前echo是on还是off的状态,然后把输出的标准错误流重定向追加到setting.txt,这显然不是你想要的。好习惯是把重定向写前面,改成>> setting.txt echo 2。
这个问题写的时候不容易注意到,但是你只要一贴报错,自然一目了然。
顺便,如果你正确设置了iloadGaugeom,也不需要那么多命令,新版Multiwfn载入文件后直接输入gi回车就是生成Gaussian输入文件。

作者
Author:
星斗如盘    时间: 2021-7-7 20:29
snljty 发表于 2021-7-7 20:23
如果只是当前目录下,其实没必要用for /f。把for /f %%i in (`dir *.log /b`)改成for %%i in (*.log)也可以 ...

感谢您的建议,不是报错,是没有输出文件,所以也不知道哪里有问题。新版的Multiwfn这么直接了吗?我试试
作者
Author:
snljty    时间: 2021-7-7 20:37
星斗如盘 发表于 2021-7-7 20:29
感谢您的建议,不是报错,是没有输出文件,所以也不知道哪里有问题。新版的Multiwfn这么直接了吗?我试试

我感觉这个功能至少也有一年多了...你的bat测试时候不要直接双击,启动cmd.exe,cd 到当前目录再运行.\xxx.bat,这是基本操作。另外,已经给你指出一个错误了。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3