人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


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

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

●質問者: ryokp
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Z1000S

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ