计算化学公社

 找回密码 Forget password
 注册 Register
Views: 10062|回复 Reply: 11
打印 Print 上一主题 Last thread 下一主题 Next thread

[综合交流] 写了一个小脚本利用Multiwfn转换文件失败

[复制链接 Copy URL]

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

本帖最后由 星斗如盘 于 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提供的脚本十分方便

log2gjf.bat

273 Bytes, 下载次数 Times of downloads: 9

68

帖子

0

威望

1646

eV
积分
1714

Level 5 (御坂)

2#
发表于 Post on 2021-7-7 17:49:06 | 只看该作者 Only view this author
echo -e '100\n2\n10' | Multiwfn *.log

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

3#
 楼主 Author| 发表于 Post on 2021-7-7 18:17:55 | 只看该作者 Only view this author
本帖最后由 星斗如盘 于 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$

1万

帖子

0

威望

9740

eV
积分
21936

Level 6 (一方通行)

4#
发表于 Post on 2021-7-7 18:31:04 | 只看该作者 Only view this author
星斗如盘 发表于 2021-7-7 11:17
好像不行呀?具体的脚本怎么样的呢?

不要只说不行,要给出具体的、完整的报错信息
Zikuan Wang
山东大学光学高等研究中心 研究员
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员
Google Scholar: https://scholar.google.com/citations?user=XW6C6eQAAAAJ
ORCID: https://orcid.org/0000-0002-4540-8734
主页:http://www.qitcs.qd.sdu.edu.cn/info/1133/1776.htm
GitHub:https://github.com/wzkchem5
本团队长期招收研究生,有意者可私信联系

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

5#
 楼主 Author| 发表于 Post on 2021-7-7 18:53:44 | 只看该作者 Only view this author
本帖最后由 星斗如盘 于 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系统

1万

帖子

0

威望

9740

eV
积分
21936

Level 6 (一方通行)

6#
发表于 Post on 2021-7-7 19:15:47 | 只看该作者 Only view this author
星斗如盘 发表于 2021-7-7 11:53
好像不行,显示:
"-e '100\n2\n10" cannot be found, input again
forrtl: 管道已结束。

echo -e这个写法只有在linux下可用
Zikuan Wang
山东大学光学高等研究中心 研究员
BDF(https://bdf-manual.readthedocs.io/zh_CN/latest/Introduction.html)、ORCA(https://orcaforum.kofo.mpg.de/index.php)开发团队成员
Google Scholar: https://scholar.google.com/citations?user=XW6C6eQAAAAJ
ORCID: https://orcid.org/0000-0002-4540-8734
主页:http://www.qitcs.qd.sdu.edu.cn/info/1133/1776.htm
GitHub:https://github.com/wzkchem5
本团队长期招收研究生,有意者可私信联系

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

7#
 楼主 Author| 发表于 Post on 2021-7-7 19:27:50 | 只看该作者 Only view this author
wzkchem5 发表于 2021-7-7 19:15
echo -e这个写法只有在linux下可用

Multiwfn传递参数的方法有几种呢?

313

帖子

2

威望

3874

eV
积分
4227

Level 6 (一方通行)

8#
发表于 Post on 2021-7-7 19:47:08 | 只看该作者 Only view this author
  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
复制代码

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
星斗如盘 + 5 好物!

查看全部评分 View all ratings

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

9#
 楼主 Author| 发表于 Post on 2021-7-7 20:16:09 | 只看该作者 Only view this author
本帖最后由 星斗如盘 于 2021-7-7 20:32 编辑

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

1187

帖子

5

威望

2869

eV
积分
4156

Level 6 (一方通行)

10#
发表于 Post on 2021-7-7 20:23:57 | 只看该作者 Only view this author
本帖最后由 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输入文件。

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
星斗如盘 + 3

查看全部评分 View all ratings

235

帖子

1

威望

1176

eV
积分
1431

Level 4 (黑子)

11#
 楼主 Author| 发表于 Post on 2021-7-7 20:29:59 | 只看该作者 Only view this author
snljty 发表于 2021-7-7 20:23
如果只是当前目录下,其实没必要用for /f。把for /f %%i in (`dir *.log /b`)改成for %%i in (*.log)也可以 ...

感谢您的建议,不是报错,是没有输出文件,所以也不知道哪里有问题。新版的Multiwfn这么直接了吗?我试试

1187

帖子

5

威望

2869

eV
积分
4156

Level 6 (一方通行)

12#
发表于 Post on 2021-7-7 20:37:20 | 只看该作者 Only view this author
星斗如盘 发表于 2021-7-7 20:29
感谢您的建议,不是报错,是没有输出文件,所以也不知道哪里有问题。新版的Multiwfn这么直接了吗?我试试

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

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-1-25 15:34 , Processed in 0.169084 second(s), 24 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list