- ベストアンサー
コマンドプロンプトでファイル名を取得・コピーする方法
- Gドライブにある複数のファイル名をそのまま別の場所にコピーしたいユーザー向けの情報。
- 特定のフォルダからファイルを取得し、日時を付加した新しい名前で別のフォルダに保存する方法を解説。
- カスタマイズ可能なバッチファイルを作成し、簡単にファイルのコピーを行う手順について触れる。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
コピー先のファイル名の yyyymmdd_HHMMSS の部分ですが、何を意味するのかの説明が無いです。 説明が無いと言うことはみたままの英字と下線の並んだ文字列という意味になりますが、おそらくそうじゃなくて、説明漏れですよね? 20231120_225933 のように日時を意味する文字列にしたいのだと思いますが、コピー作業を行う日時なのか、ファイルの更新タイムスタンプなのか不明です。 コピー作業を行う日時の場合: for /f "delims=/:. tokens=1-6" %%A in ("%DATE%/%TIME: =0%" ) do set YMDHMS=%%A%%B%%C_%%D%%E%%F for %%X in (G:\aaa\test*.txt) do copy %%X D:\hokan\%%~nX_%YMDHMS%.txt ファイルの更新タイムスタンプの場合: この場合は秒は取得できないので00固定。秒まで必要なら別のツールを使う必要がある。 for %%X in (C:\aaa\test*.txt) do call :COPY %%X exit /b :COPY for /f "tokens=1-5 delims=/: " %%A in ("%~t1" ) do set YMDHMS=%%A%%B%%C_%%D%%E00 copy %1 D:\hokan\%~n1_%YMDHMS%.txt exit /b いずれも、delimsの文字列の後、引用符の手前に空白があります。
その他の回答 (3)
- UY-Scuti
- ベストアンサー率85% (17/20)
すみません、ちょっと変えます。 powershell -c "'#'+(gc '%~f0' -Raw) | iex" &exit/b ls G:\aaa\test*.txt | ? { $_.BaseName -match 'test[0-9]*$' } | % { $ymd='{0:yyyyMMdd_HHmmss}' -f (Get-Date) }{ cp $_ "D:\hokan\$($_.BaseName)_$($ymd)$($_.Extension)" } ------------------------------------------------------------ 一般的なバッチファイルでは、 set ymd=%date:/=% set hms=%time::=% set hms=%hms:~,6% set hms=%hms: =0% pushd "G:\aaa" for /f %%i in ('dir /b test* ^| findstr /r "test[0-9]*\.txt"') do ( copy "%%i" "D:\hokan\%%~ni_%ymd%_%hms%%%~xi" ) ---------------------------------------------------------------- testの後に文字が付く場合は数値としています。 test1 とか test2 testA とか testB は対象にしていません。
- UY-Scuti
- ベストアンサー率85% (17/20)
拡張子 txt なので、2行目を ls G:\aaa\test* | ? { ↓↓ ls E:\aaa\test*.txt | ? { に変えてください。
- UY-Scuti
- ベストアンサー率85% (17/20)
以下をバッチファイルとして実行。 powershell -c "'#'+(gc '%~f0' -Raw) | iex" &exit/b ls G:\aaa\test* | ? { $_.BaseName -match 'test[0-9]*$' } | % { $ymd='{0:yyyy_MMdd_HHmmss}' -f (Get-Date) }{ cp $_ "D:\hokan\$($Matches.0)_$ymd$($_.Extension)" }
補足
説明不足で申し訳ありませんでした。 yyyymmdd_HHMMSS はコピー作業時の時間でした。 教えていただいたコマンドを組み合わせて、希望通りの内容のバッチを作成することができました。 ありがとうございました。