プロが教える店舗&オフィスのセキュリティ対策術

ディレクトリ1に以下のようなファイルがあります。
 "file01_05_aa.jpg"
 "file01_05_bb.jpg"
 "file01_05_cc.jpg"
 "file21_04_aa.jpg"
 "file21_04_bb.jpg"
 "file21_04_cc.jpg"
 "file31_03_aa.jpg"
 "file31_03_bb.jpg"
 "file31_03_cc.jpg"
これらのファイル形式は
(file)(XX)_(XX)_(XX).jpg

これらの中からこの正規表現でヒットするファイルのみ指定した別ディレクトリにコピーしたいです。
file\d\d_(05|03)_(aa|cc)\.jpg

Windowsのコマンドプロンプトで実現可能でしょうか。可能であればコマンド列を教えてください。
(cygwinでも良いです。)

よろしくお願いいたします。

A 回答 (4件)

cygwinを使ってもいいのであれば


$ cp `ls --color=no | egrep -e '正規表現'` コピー先
で行けると思われます。
シングルクォート(')とバッククォート(`)の違いに注意。
    • good
    • 0

この質問の条件程度なら正規表現を使わずに判定できますので、バッチファイルで実現することも可能でしょう。


ただし、他の方の指摘通り、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 がありますが、(~~~) や | が使えないようなので、この質問のケースで利用するのは難しいと思われます。
    • good
    • 0

bash なら brace expansion.



コマンドプロンプトでも #1 をヒントに for で処理できる.
    • good
    • 0

Windowsのコマンドプロンプトは、正規表現をサポートしていないので無理です。


cygwin の bashもダメだと思います。tcsh ならいけたような気がします。
しばらくやってないので、忘れちゃいました。

自分だったら、perl でスクリプト書いちゃうかな。
    • good
    • 0

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