質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

Q&A

解決済

1回答

27477閲覧

[.bat] for文内での文字列置換方法

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 7

Microsoft Windows 7は過去にリリースされたMicrosoft WindowsのOSであり、Windows8の1代前です。2009年の7月にリリースされ販売されました。Windows7の前はWindowsVistaで、その更に3年前にリリースされました。

0グッド

0クリップ

投稿2016/09/11 11:19

編集2016/09/11 11:32

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! )

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ynakano

2016/09/11 11:30

1行目ですが、末尾のダブルクォーテーションがないのは転記ミスではないですか?
退会済みユーザー

退会済みユーザー

2016/09/11 11:31

はい。仰るとおり転記ミスでした。失礼しました
guest

回答1

0

ベストアンサー

括弧のエスケープの問題ではないでしょうか。

set After=!Before:(1)=!

の部分を

set After=!Before:^(1^)=!

としたら動作しました。(Win7 Home)

投稿2016/09/11 11:49

ynakano

総合スコア1894

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/11 12:05

ありがとうございます。仰るとおりでした! 括弧もエスケープが必要な文字だったんですね! 完全にミスでした。
otn

2016/09/11 13:31

「(」にエスケープは要らないはずです。「)」は、「do (」の開きカッコを閉じるカッコとみなされないよう、エスケープが必要です。開きカッコの中でなければエスケープは要らない。
ynakano

2016/09/11 13:42

> otnさん 試してはないですが、そうなんですね。 ただ、後からスクリプトを読んだときに直感的でなく、何か意図があるのかと勘ぐりそうですね。 ないしは記述ミスじゃないかって思われるような。
otn

2016/09/11 13:47

> 後からスクリプトを読んだときに do ( の中が複雑な場合は、サブルーチンにくくり出すのが良いですね。遅延環境変数も使わなくて良いし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問