在Python中运行.vbs scipt并没有做任何事情

时间:2017-03-18 11:36:09

标签: python vbscript automation

基本上,我的脚本所做的是检查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")

两者都有相同的结果,它没有做任何事情。

有人有想法吗?

2 个答案:

答案 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.pathshutil模块。

添加VB脚本并启动子进程会使代码变得复杂且难以调试。