观
基本上,我的脚本所做的是检查C:/ SOURCE for .txt文件并为其添加时间戳。要复制它,您基本上可以创建该文件夹并在其中放置一些txt文件。然后,它应该运行一个.vbs文件,然后运行带有一些rclone命令的.bat文件,这些命令无关紧要。我是这样做的,因为在通过.vbs文件运行rclone命令时,不会打开CMD窗口。
Python代码
import time, os, subprocess
while True:
print("Beginning checkup")
print("=================")
timestamp = time.strftime('%d_%m_%H_%M') # only underscores: no naming issues
the_dir = "C:/SOURCE"
for fname in os.listdir(the_dir):
if fname.lower().endswith(".txt"):
print("found " + fname)
time.sleep(0.1)
new_name = "{}-{}.txt".format(os.path.splitext(fname)[0], timestamp)
os.rename(os.path.join(the_dir, fname), os.path.join(the_dir, new_name))
time.sleep(0.5)
else:
subprocess.call(['cscript.exe', "copy.vbs"])
time.sleep(60)
VBScript代码
Set WshShell = CreateObject("WScript.Shell" )
WshShell.Run Chr(34) & "copy.bat" & Chr(34), 0
Set WshShell = Nothing
Python脚本唯一重要的部分是在最后else
之下,subprocess.call()
应该运行.vbs文件。运行脚本时会发生什么,它显示了运行CMD时总是出现的前两行,但后来没有。
我怎么能解决这个问题?我试过了:
subprocess.call("cscript copy.vbs")
subprocess.call("cmd /c copy.vbs")
两者都有相同的结果,它没有做任何事情。
有人有想法吗?
答案 0 :(得分:1)
为什么要调用VBScript从Python调用批处理脚本?您应该可以直接从Python代码中运行批处理脚本执行的任何操作。但即使你想保留批处理脚本,这样的事情应该没有VBScript作为中介就可以了。
subprocess.call(['cmd', '/c', 'copy.bat'])
但是,您可能希望提供批处理文件的完整路径,以避免工作目录不符合您的想法。
如果批处理脚本与Python脚本位于同一目录中,则可以使用以下内容构建路径:
import os
import subprocess
scriptdir = os.path.dirname(__file__)
batchfile = os.path.join(scriptdir, 'copy.bat')
subprocess.call(['cmd', '/c', os.path.realpath(batchfile)])
答案 1 :(得分:0)
似乎没有使用普通Python无法完成的操作。扫描目录,复制文件 - Python在标准库中拥有它。请参阅os.path
和shutil
模块。
添加VB脚本并启动子进程会使代码变得复杂且难以调试。