質問: for文内での置換方法を教えていただきたく質問させていただきます。 dirにてフォルダ内の一覧を取得して 一行ずつ処理をします。 その際にファイル名に付いている(1)~(10)を置換で削除したいと思っています。 しかし、for文内のループ変数の中身を置換するとなると記述の仕方が全くわからないです。 そのため一度変数に入れて置換をしよう遅延環境変数を使って見たのですが、これも置換の方法がわからないという結果になってしまいました。 実装方法を教えていただければ幸いです。 ``` set F_TEST="C:\test\" for /f "delims=;" %%A in ('dir /B %F_TEST%') do ( echo ファイル名:%%~nA REM ファイル名から(1)~(10)を削除したい set After=%A:(1)=% REM 遅延環境変数を使ってみた場合 REM setlocal enabledelayedexpansion REM 結果:! の使い方が誤っています。 set Before=%%~nA set After=!Before:(1)=! echo !After! REM 結果:(1 set Before=%%~nA set After=%Before:(1)=% echo !After! ) ```
回答: 括弧のエスケープの問題ではないでしょうか。 set After=!Before:(1)=! の部分を set After=!Before:^(1^)=! としたら動作しました。(Win7 Home)