teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

2022/02/10 05:02

投稿

otn
otn

スコア86349

answer CHANGED
@@ -1,16 +1,36 @@
1
- `enabledelayedexpansion`を使っている限り、`!`を使うのは無理です。
1
+ `enabledelayedexpansion`を使っている限り、`!`を使うのは無理です。
2
-
2
+
3
- 置換文字列を変数に置くのをあきらめて、
3
+ 置換文字列を変数に置くのをあきらめて、
4
- ```CMD
4
+ ```CMD
5
- set INPUT_FILE=test.txt
5
+ set INPUT_FILE=test.txt
6
- set OUTPUT_FILE=test2.txt
6
+ set OUTPUT_FILE=test2.txt
7
- for /f "delims=" %%a in (%INPUT_FILE%) do call :FOO "%%~a"
7
+ for /f "delims=" %%a in (%INPUT_FILE%) do call :FOO "%%~a"
8
- exit /b
8
+ exit /b
9
-
9
+
10
- :FOO
10
+ :FOO
11
- set line=%~1
11
+ set line=%~1
12
- set line=%line:auth_password=Pass!012%
12
+ set line=%line:auth_password=Pass!012%
13
- echo %line% >> %OUTPUT_FILE%
13
+ echo %line% >> %OUTPUT_FILE%
14
- exit /b
14
+ exit /b
15
- ```
15
+ ```
16
- ですね。
16
+ ですね。
17
+ ### 追記
18
+ 「一旦は全角に変更しておき、後で半角に戻す」というのもありますね。
19
+ ```CMD
20
+ set BEFORE_Pass=auth_password
21
+ set AFTER_Pass=Pass!012
22
+
23
+ set INPUT_FILE=test.txt
24
+ set OUTPUT_FILE=test2.txt
25
+
26
+ set AFTER_Pass=%AFTER_Pass:!=!%
27
+ for /f "delims=" %%a in (%INPUT_FILE%) do call :SUB "%%a"
28
+ exit /b
29
+
30
+ :SUB
31
+ set line=%~1
32
+ setlocal enabledelayedexpansion
33
+ set line=!line:%BEFORE_Pass%=%AFTER_Pass%!
34
+ endlocal&set line=%line%
35
+ echo %line:!=!%>>%OUTPUT_FILE%
36
+ ```