連続で処理したいので、xargsっぽい動作をするbatを作ってみた
ファイルを順番に7zにかけたいので、unixのxargsっぽい動作をするbatを作ってみた。
↓これを xargs.bat として保存してください。
@echo off rem 引数が無いとき if "%~1"=="" ( echo Unixのxargs -0 -i と似たような動作をするプログラム. echo usage: echo. echo dir /b *.txt ^| %0 command echo dir /b *.txt ^| %0 command "{}" //{}が置換される。 echo dir /b *.txt ^| %0 command "{}.txt" "{}" //{}は複数回置換される。 echo. echo dir /b *.txt ^| %0 echo command "{}" //Unix xargs -t のかわりにどうぞ。 exit/b 1 ) setlocal ENABLEDELAYEDEXPANSION set COMMAND=%* for /f "delims=" %%i in ('findstr .*') do call :exec %%i exit/b :exec set REP=%* if "%REP%"=="." exit/b if "%REP%"==".." exit/b rem REPLACE {} set COMMANDEX=!COMMAND:{}=%REP%! rem DEBUG rem echo %COMMANDEX% rem EXECUTE!! %COMMANDEX% exit/b
で、こんなふうに使います。
現在ディレクトリにある *.foo を 7z で圧縮します。
dir /b *.foo | xargs 7z "{}.7z" "{}"
ようするに、 Unix(Linux)系でいう、↓と同じような処理です。
(ただし、windowsのdirの仕様上、サブディレクトリまでは見に行きません。 dir /s オプションはちょっと勝手が違うかも・・・?)
find . -name "*.foo" -print0 | xargs -0 -i 7z {}.7z {}
このスクリプトは、hishidamaさんのスクリプトを改造して作ってます。
http://www.ne.jp/asahi/hishidama/home/tech/windows/cmd/xargs.html