まず、バッチスクリプトを書く経験はあまりありません。このサイトや他のサイトの助けを借りて、ネットワークに接続されていない複数のPCからファイルをUSBドライブにコピーするスクリプトを書きました。今私はこれらのバックアップフォルダをNASドライブにコピーしたいと思います。 NASドライブG:\
はフォルダが含まフォルダ名に二番目のアンダースコアで区切られた部分に基づいて、可変の宛先にフォルダをコピーします。
backup_PC1_data1_dd-mm-yyyy
backup_PC1_data2_dd-mm-yyyy
backup_PC2_data1_dd-mm-yyyy
backup_PC2_data2_dd-mm-yyyy
...
:
ABC_PC1
ABC_PC2
...
は、今私は、フォルダ名に応じてNASドライブにUSBドライブからフォルダをコピーするバックアップフォルダがすべてのように命名されています。例えば
:Backup_PC1_data1_tt-mm-yyyy
とBackup_PC1_data2_tt-mm-yyyy
はBackup_PC2_data1_tt-mm-yyyy
とBackup_PC2_data2_tt-mm-yyyy
はNASドライブ上のフォルダABC_PC2
にコピーする必要があり、NASドライブ上のフォルダABC_PC1
にコピーされなければなりません。
USBからNASへのコピープロセスは異なるPCで動作する必要があり、一部のPCには複数のHDDがあるため、USBドライブからcopy2NAS
スクリプトを開始します。私は、ドライブ文字を取得して開始してソースドライブを設定します。
set drive=%~d0
set source=%drive%
私の計画はしてBackup_*
というソース内のすべてのフォルダを取得することでした:
for /d %%i in ("%source%\Backup_*")
、その後の名前を分割するような何かBackup_
と_data…
の間の部分を使用して、宛先フォルダ(常にG:\ABC_XXX
)を定義します。ここで、XXX
は、ソースフォルダ名のBackup_
と_data*
の間の部分です。
のようなコードを書く:名前がBackup_*
であればUSBドライブチェック上のすべてのフォルダについて
- 。
- はいの場合は、名前を分割して
Backup_
と_data*
の間で部分を抽出します。 - ソースフォルダー名の抽出部分を使用して、宛先フォルダーを指定します。
- 送信元フォルダ(およびその中のファイル)を送信先にコピーします。
私がこれまでにコード化されています:
set drive=%~d0
set source=%drive%
for /d %%i in (%source%\Backup_*) do call :ProcessDir "%%i"
:ProcessDir
set "foldername=%~n1"
echo %foldername%
for /F "tokens=2 delims=_" %%a in ("%foldername%") do set nthstring=%%a
set "Source=%source%\%foldername%"
set "destination=C:\mol\backups\backup_nas\GMH_%nthstring%\%foldername%"
robocopy %Source% %destination% /s
しかし、これは私のバッチスクリプトのスキルを超えているように見えます。私はどちらもコピープロセスなしで、または新しく作成された宛先へのファイルだけになりました...
Backup_*
フォルダはUSBドライブ上の唯一のフォルダではありません。
このタスクをどのように実現するか考えている人はいますか?
あなたが試したことを分かち合い、困ったことを説明してください!ファイルが既に宛先ディレクトリに存在する場合にはどうなりますか?/d/dの代わりに – aschipfl
を使用すると、( 'Dir/B/ADバックアップ_ * _ * _ *^|| findstr' [0-9]でトークン= 1-4delims = _ " [0-9] * - [0-9] [0-9] * - 20 [0-9] [0-9] $ "')エコー#%% A#%% B#%% C#% %D# 'デモだけのエコー。 – LotPings
これまでのところ、私はこれを持っている: '設定ドライブ=%〜D0 集合ソース=%ドライバ% 用/ D %%のI(%ソース%\ BACKUP_ *)を呼び出してください:ProcessDirを "%% I" を:ProcessDir "foldername =%〜n1"を設定します /Fの "%2" %% aの "%foldername%")を設定するには、/% =%ソース%\%フォルダ名%」 セット "宛先= C:\モル\バックアップ\ backup_nas \ GMH_%nthstring%\%フォルダ名%" のRobocopy%出典%の%先%/ S' –