2009-06-05 8 views
1

ローカルディレクトリのファイル(8)をネットワーク上のマシンのリスト(ホスト名またはIP)にコピーするバッチファイルが必要です。ホスト名/ IP多くのマシンにファイルをコピーするためのバッチファイル

私は、私も必ずそれを接続するために、各システムの出力を確認する必要があります

次のホスト名/ IPを入力するように何度も何度もスクリプトを実行する必要が希望しません正しくコピーされました。おそらく「次は処理する準備ができましたか?各マシンの後に?私はバッチファイルを持ってする方法がわからない

STDINの等価なので、私が持っているすべての

net use S: \\?STDIN?\C$ /user:domain\myusername mypassword 

copy %~file01.txt S:\%SystemRoot%\system32 /y 
copy %~file02.txt S:\%SystemRoot%\system32 /y 
copy %~file03.txt S:\%SystemRoot%\system32 /y 
copy %~file04.txt S:\%SystemRoot%\system32 /y 
copy %~file05.txt S:\%SystemRoot%\system32 /y 
copy %~file06.txt S:\%SystemRoot%\system32 /y 
copy %~file07.txt S:\%SystemRoot%\system32 /y 
copy %~file08.txt S:\%SystemRoot%\system32 /y 

net use :s /delete 

do it again 
+0

システムルートの代わりに「ウィンドウ」を使用してしまい、%〜(システムコンテキストではなくコマンドラインから実行できるようにしました) – Mathew

答えて

1

ユーザーを促すことができるで、

これまで?STDIN?プレースホルダーはご容赦くださいませあなたが使用してループをすることができます

set /p HOST=Machine? 
net use S: \\%HOST%\C$ ... 

:(および環境変数にそれを保存)set /pコマンドを使用して、入力のためにラベルを付けてそれにジャンプします。あなたはしかし、終了する方法を提供する必要があります:

:loop 
set /p HOST=Machine? (leave blank to exit) 
if [%HOST%]==[] goto :EOF 
net use S: \\%HOST%\C$ ... 
copy ... 
... 
goto loop 

あなたが個別に各ホスト名をバッチファイルへの引数をループすることができますも入力したくない場合は、次の

:loop 
if [%1]==[] goto :EOF 
net use S: \\%1\C$ ... 
copy ... 
... 
shift 
goto loop 

あなたがすることができます次のように、それを呼び出すことができます。

my_batch machine1 machine2 192.168.12.14 ... 

HTH

0

あなたが見て、 "もしERRORLEVEL 1" を使用することができますコピーでエラーが発生した場合、そのコピーの問題をトラップできます。ファイルが存在するかどうかをチェックするための "if exist"とともに、長さがゼロのファイルがいくつか取得されることがあります。

しかし、あなたは仕事のためのより優れたツールとしてPowershellを調べることができます。

関連する問題