- ベストアンサー
コマンドプロンプトのバッチファイルで正規表現を使ってファイルをコピーする方法
- コマンドプロンプトやCygwinを使用して、特定の正規表現に一致するファイルをコピーする方法を紹介します。
- 指定したディレクトリ内のファイル名が特定の正規表現に一致する場合、それらのファイルを別のディレクトリにコピーします。
- WindowsのコマンドプロンプトやCygwinのコマンドを使用して、この処理を実現することができます。具体的なコマンド列は以下の通りです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
cygwinを使ってもいいのであれば $ cp `ls --color=no | egrep -e '正規表現'` コピー先 で行けると思われます。 シングルクォート(')とバッククォート(`)の違いに注意。
その他の回答 (3)
- root139
- ベストアンサー率60% (488/809)
この質問の条件程度なら正規表現を使わずに判定できますので、バッチファイルで実現することも可能でしょう。 ただし、他の方の指摘通り、cygwin やスクリプト言語が使えるなら、そちらの方がはるかに楽だと思われます。 下記はバッチファイルのみで実現した例です。 ---------------------------------------- @ECHO OFF FOR %%F IN (dir1\*) DO CALL :EXEC_COPY %%~nxF GOTO :EOF :EXEC_COPY SET FNAME=%1 IF NOT %FNAME:~0,4%==file GOTO :EOF SET NUM1=%FNAME:~4,2% IF DEFINED NUM1 SET NUM1=%NUM1:0=% IF DEFINED NUM1 SET NUM1=%NUM1:1=% IF DEFINED NUM1 SET NUM1=%NUM1:2=% IF DEFINED NUM1 SET NUM1=%NUM1:3=% IF DEFINED NUM1 SET NUM1=%NUM1:4=% IF DEFINED NUM1 SET NUM1=%NUM1:5=% IF DEFINED NUM1 SET NUM1=%NUM1:6=% IF DEFINED NUM1 SET NUM1=%NUM1:7=% IF DEFINED NUM1 SET NUM1=%NUM1:8=% IF DEFINED NUM1 SET NUM1=%NUM1:9=% IF DEFINED NUM1 GOTO :EOF IF NOT %FNAME:~6,1%==_ GOTO :EOF SET NUM2=%FNAME:~7,2% IF %NUM2%==03 GOTO OK_1 IF %NUM2%==05 GOTO OK_1 GOTO :EOF :OK_1 IF NOT %FNAME:~9,1%==_ GOTO :EOF SET STR1=%FNAME:~10,2% IF %STR1%==aa GOTO OK_2 IF %STR1%==cc GOTO OK_2 GOTO :EOF :OK_2 IF NOT %FNAME:~12%==.jpg GOTO :EOF COPY /-Y dir1\%FNAME% dir2\ GOTO :EOF ---------------------------------------- なお、DOSコマンドにも正規表現が使える findstr がありますが、(~~~) や | が使えないようなので、この質問のケースで利用するのは難しいと思われます。
- Tacosan
- ベストアンサー率23% (3656/15482)
bash なら brace expansion. コマンドプロンプトでも #1 をヒントに for で処理できる.
- NNori
- ベストアンサー率22% (377/1669)
Windowsのコマンドプロンプトは、正規表現をサポートしていないので無理です。 cygwin の bashもダメだと思います。tcsh ならいけたような気がします。 しばらくやってないので、忘れちゃいました。 自分だったら、perl でスクリプト書いちゃうかな。