質問: バッチファイル中の記述でrobocopyコマンドでフォルダIN1からOUT1へのフォルダ およびファイル移行をしております。 そこで、特定のファイルが含まれる階層のサブフォルダはサブフォルダ配下を含めて 除外する(オプション"/XD"と同意)設定を導入したいのですが良い方法が思いつかず、 お知恵をお貸し頂きたいです。 例> 記述:robocopy C:\Users\Desktop\IN1 C:\Users\Desktop\OUT1 /s /xj /copy:DATO /R:0 /MOV C:\Users\Desktop\IN1 | | |-------フォルダA--------除外.txt | | | |___abc.xls | |-------フォルダB--------def.doc ↓ ↓ 除外.txtが含まれるフォルダAごと移行対象から除外する ↓ C:\Users\Desktop\OUT1 | | | | | |-------フォルダB--------def.doc ※この他にもフォルダが複数あり、除外.txtが配置される場所はフォルダA、B、・、・ の直下のどこか 良い記述方法がございましたら教えてください。 よろしくお願い致します。
回答: コマンドプロプトで、 ``` cd C:\Users\Desktop\IN1 (for /f "delims=" %F in ('dir /s/b 除外.txt') do @echo %~dpF) > dirlist.txt ``` で、「除外.txt」の親ディレクトリ名の一覧が得られますので、それを使って`/XD`を書いてください。 そこも自動化する必要がありますか? 追記 == > > 自動で適用する方法についても教えて頂けますでしょうか。 > > > バッチファイルにして、 ``` setlocal enabledelayedexpansion cd C:\Users\Desktop\IN1 set DIRS= for /f "delims=" %%F in ('dir /s/b 除外.txt') do set DIRS=!DIRS! "%%~dpF" robocopy ~~~ /xd %DIRS% ``` コマンドラインの最大長は約8000文字らしいので、対象がたくさんあり過ぎる場合は注意ください。 長さの見当が付かない場合は、最初の方法で一度ファイルに書き出して他のオプションと合わせて8000文字を超えないかチェック要。