下記のようなディレクトリだった場合です。
ーーーーーーーーーーーーーーーーーーーーー
- フォルダA
.batファイルの置き場所
- フォルダC
- フォルダB
sent.csv
open.csv
- フォルダD
- フォルダE
sent.csv
open.csv
- フォルダF
- フォルダG
sent.csv
open.csv
- フォルダH
ーーーーーーーーーーーーーーーーーーーーー
フォルダA以下にあるすべての「sent.csv」ファイルを
フォルダHに移動させたいです。
(もしくは移動させずとも1つのCSVファイルに結合)
その場合、下記のようなコマンド処理で想定通りのことが出来るかと思ったのですが、上手くいきませんでした。「コマンドの構文が間違っている」とエラーが返ってきます。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
@echo off
for /F "delims=" %%F in ('dir /b /s sent.csv') do (
move %%F \all
pause
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
どのような記述にすれば想定通りの処理が出来ますでしょうか。
どうぞよろしくお願いします。
エラー「コマンドの構文が間違っている」の原因は、
doの後の"("に対応する")"が無いためではないでしょうか。
ひとつのフォルダに、同じ名前のファイルを複数格納するのは無理なので、
1箇所にまとめたいのであれば、コピー後のファイルに識別(たとえば連番とか)を付けるような処理が必要になります。
また、結合の順番についても、以下に提示したバッチの場合には、
あまり期待しない方がよいと思います。
細かい制御を必要とするのであれば、バッチファイルよりも
VBスクリプトやWindows Power Shell等の使用も検討してみてはいかがでしょうか。
バッチでの処理としては、以下のようにすればどうでしょうか。
処理対象ファイルがCSVのようなので、テキストの処理で出来ますので
Copyでひとつずつ結合してみました。
バッチファイルと同じフォルダに、dest.csvというファイル名で作成しています。
実行時に、同名のファイルがある場合には、上書きされます。
set destfile=dest.csv set destfilew=destw.csv type nul > %~dp0%destfile% for /f "usebackq" %%f in (`dir /B /S sent.csv`) do ( copy %~dp0%destfile% + %%f %~dp0%destfilew% del %~dp0%destfile% ren %~dp0%destfilew% %destfile% ) pause