dポイントプレゼントキャンペーン実施中!

こんにちは。超初心者なのですが教えてください。

ある複数フォルダに格納されている.txtファイルを、現在の
フォルダ名を取得して、別フォルダにリネームして
格納するバッチファイルを作成したいと考えています。

for文を繰り返し使わなければいけないことはわかっているのですが、それをどう表現していいのか全然わかりません。

例えば、
データ取得元として以下のファイルがあったら
C:\temp\20100101\data1.txt
C:\temp\20100101\data2.txt
C:\temp\20100101\data3.txt
C:\temp\20100102\data1.txt
C:\temp\20100102\data2.txt
C:\temp\20100103\data1.txt
C:\temp\20100103\data2.txt

これを別フォルダに、現在のフォルダ名をファイル名にくっつけて
以下のように一つのフォルダに纏めて格納したいと思っています。
ファイルの中身はそのままコピーしたいので、どこかでcopyコマンド
を使うかもしれないです。

C:\test\data1_20100101.txt
C:\test\data2_20100101.txt
C:\test\data3_20100101.txt
C:\test\data1_20100102.txt
C:\test\data2_20100102.txt
C:\test\data1_20100103.txt
C:\test\data2_20100103.txt

実装方法として以下までは考えましたが、これ以上は無理そうです。

rem set A=C:\temp
rem set B=C:\test

for %%A in (C:\temp\) do ( if not "%%A"=="" ( pushd "%%A"
for /d %%B in (*) do ( if not "%%B"=="" ( pushd "%%B"
for /d %%C in (*) do ( if not "%%C"=="" ( pushd "%%C" ) )
) ) popd?
) )


申し訳ありませんが、お助け願います。

A 回答 (2件)

rem 対象ファイルの一覧作成


dir /s /b C:\temp > file.tmp
rem それに対して繰り返し
for /f "delims=" %%F in (file.tmp) do (
rem パス名の分解(ディレクトリ名の取り出し)
for /f "delims=\ tokens=3" %%D in ("%%F") do (
rem コピー(ファイル名%%Fの途中に%%Dを入れる)
copy %%F C:\test\%%~nF_%%D%%~xF
))
del file.tmp
    • good
    • 0
この回答へのお礼

ご回答の結果をbatファイルにコピーして実行したら、ちゃんと出来ていました。すごいです!
ありがとうございましたー。

もう1点お聞きしたいのですが、
こちらのローカルPCの実際のフォルダ構成は日付の下に
曜日が入っていて、下記のようになっています。

C:\temp\20100101\Mon\data1.txt
C:\temp\20100101\Mon\data2.txt
C:\temp\20100101\Mon\data3.txt

これを
C:\test\data1_20100101_Mon.txt
C:\test\data2_20100101_Mon.txt
C:\test\data3_20100101_Mon.txt
のようにするには、

for文をもう一個加えればよいのでしょうか。

何もわかってなく申し訳ありませんが、よろしくお願いいたします。

お礼日時:2010/01/25 06:11

>C:\temp\20100101\Mon\data1.txt



"delims=\ tokens=3" で、\ で分解した3つめを取っていますので、4つめも取るようにします。
tokens=3,4 にすると %%D = 20100101, %%E = Mon になります。

dir /s /b C:\temp > file.tmp
for /f "delims=" %%F in (file.tmp) do (
for /f "delims=\ tokens=3,4" %%D in ("%%F") do (
copy %%F C:\test\%%~nF_%%D_%%E%%~xF
))
del file.tmp
    • good
    • 0
この回答へのお礼

正しく実行することができました。
ありがとうございました。

お礼日時:2010/01/25 21:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています