2016-09-23 4 views
0

私はこのコードを持って、robocopyをバッチすべてのローカルディスクを取得するためのファイルとバックアップ

For /F "tokens=1" %%I In ('wmic logicaldisk get DeviceID^,DriveType^|Findstr "3"') Do (
If Exist "%%I" robocopy %%I "%dest%\%%I" /MIR /IS /XA:SH /XD "!dirs!" /XF "!files!" /R:3 /W:3 /TEE /log+:"%srclog%\%logfile%" /NP 
) 

ソースすなわちのでしかしrobocopyを、現在のユーザーのプロファイルパスとバックアップソースを読み:C:\ Users \ユーザー管理者の代わりに、必要なC:\

また、変数を文字と\:?これは

+0

あなたのコードをすべて見ずに勧めるのは難しいです。 – Squashman

答えて

1

%%IC:のように、コロンドライブ文字以外の何ものでもないディスクのDeviceIDを受け...ので、私は、ドライブのアルファベットによってそれらを並べ替えることができ、バックアップ先のフォルダを作成するためです。これは相対的な経路を構成する。ドライブのルートディレクトリを指す絶対パスにするには、C:\のような円記号を追加するだけです。だからコード%%I%%I\になります。質問の他の部分については

は、あなたが driveのように、例えば、あなたが %drive:~,1%のように、 sub-string expansionを適用することができ、それを行うために暫定変数を必要とする、唯一の純粋なドライブ文字を抽出します。 しかし、これはコードのブロックで発生するので、あなたは(あなたがすでに !dirs!!files!のため遅れた拡張を使用しているので、私はすでにあなたのスクリプト内のコマンドライン setlocal EnableDelayedExpansionどこかを持っていると仮定) !drive:~,1!のように、 delayed expansionを適用する必要があります。

for /F "tokens=1" %%I in ('wmic LogicalDisk GET DeviceID^,DriveType ^| findstr "3"') do (
    set "drive=%%I" 
    if exist "%%I\" robocopy "%%I\" "%dest%\!drive:~,1!" /MIR /IS /XA:SH /XD "!dirs!" /XF "!files!" /R:3 /W:3 /TEE /log+:"%srclog%\%logfile%" /NP 
) 
+0

その答えをありがとう、いくつかの引用符を変更しなければならなかったとそこにそれが働いている:)それを感謝! – Farhan

+0

あなたが私を助けることができるかどうか疑問に思っています。先日はうまくいきましたが、今はエラーです。2016/09/26 09:23:19エラー87(0x00000057)宛先ディレクトリの作成\\ dir \ dir \ dir \ C \ パラメータが正しくありません。これはImが最初のドライブ(C:\)をコピーしてもD:\ fineをコピーするときです。 – Farhan

+0

実現する管理者として実行したときに修正されました。同じw/o管理者権限を持つようにするにはどうしたらいいですか? – Farhan

関連する問題