2017-03-18 8 views
0

アイデア実行.VBSは基本的に、どのような私のスクリプトが行うことはCをチェックしている

に何もしません。それを複製するには、基本的にそのフォルダを作成し、いくつかの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 

subprocess.call()を実行することになっているところPythonスクリプトのための唯一の重要な部分は、else非常に最後を下回っています。 vbsファイル。スクリプトを実行すると、CMDの実行時に常に現れる最初の2行が表示されますが、何も表示されません。

どうすれば修正できますか?私は試しました:

subprocess.call("cscript copy.vbs") 
subprocess.call("cmd /c copy.vbs") 

同じ結果の両方で、何もしません。

誰でも知っていますか?

答えて

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)]) 
+0

もしそれがcmdのウィンドウを開けなかったら、私はそれをします。 vbsファイルを置くのは、ユーザーが見ることができないようにすることです。それは私がやろうとしていることです。 – diatomym

+0

あなたは正しいです。 .batファイルと.vbsファイルの全体のポイントは、ユーザーから見えないようにすることですが、Pythonから直接可能であるようです。洞察のおかげで、本当にそれについて考えていない! – diatomym

0

プレーンを使用して行うことができなかったような操作なしには存在しないようですPython。ディレクトリをスキャンし、ファイルをコピーする - Pythonは標準ライブラリにすべてを持っています。 os.pathおよびshutilモジュールを参照してください。

VBスクリプトを追加してサブプロセスを起動すると、コードが複雑になり、デバッグが困難になります。

+0

ファイルをクラウドにアップロードするためにはrcloneが必要です。使用する必要があります。 – diatomym

+0

本当にCOMオブジェクトを使用する必要があるので、偉大なwin32ライブラリを使用してみてください:http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartClientCom.html –

関連する問題