Windowsの「.batファイル」におけるコマンドの書き方に関する質問です。


下記のようなディレクトリだった場合です。
ーーーーーーーーーーーーーーーーーーーーー
- フォルダ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
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


どのような記述にすれば想定通りの処理が出来ますでしょうか。

どうぞよろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:2018/06/12 14:43:54
  • 終了:2018/06/16 14:45:04

回答(1件)

id:Z1000S No.1

Z1000S回答回数29ベストアンサー獲得回数212018/06/12 19:34:29

エラー「コマンドの構文が間違っている」の原因は、
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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません