回答編集履歴

2

追記

2021/07/23 14:24

投稿

otn
otn

スコア84571

test CHANGED
@@ -25,3 +25,99 @@
25
25
 
26
26
 
27
27
  これらを直してもまだ他に問題があるかも。
28
+
29
+
30
+
31
+ #コメントに対応した追記
32
+
33
+ ```CMD
34
+
35
+ @echo off
36
+
37
+ setlocal enabledelayedexpansion
38
+
39
+
40
+
41
+ set BEFORE_CSV=before.csv
42
+
43
+ set AFTER_CSV=after.csv
44
+
45
+ set BEFORE_STRING_TOKYO=東京
46
+
47
+ set AFTER_STRING_TOKYO=東京,1,2
48
+
49
+ set BEFORE_STRING_OSAKA=大阪
50
+
51
+ set AFTER_STRING_OSAKA=大阪,10,20
52
+
53
+
54
+
55
+ if exist %AFTER_CSV% del %AFTER_CSV%
56
+
57
+
58
+
59
+ rem CSVから値を取得する
60
+
61
+ call :returnFirstColumn "%AFTER_STRING_TOKYO%" TOKYO
62
+
63
+ call :returnFirstColumn "%AFTER_STRING_OSAKA%" OSAKA
64
+
65
+
66
+
67
+ (
68
+
69
+ for /f "delims= eol=#" %%a in (%BEFORE_CSV%) do (
70
+
71
+ set line=%%a
72
+
73
+ for /f "delims=," %%b in ("%%a") do (
74
+
75
+ if "%%b"=="%TOKYO%" (
76
+
77
+ echo !line:%BEFORE_STRING_TOKYO%=%AFTER_STRING_TOKYO%!
78
+
79
+ ) else if "%%b"=="%OSAKA%" (
80
+
81
+ echo !line:%BEFORE_STRING_OSAKA%=%AFTER_STRING_OSAKA%!
82
+
83
+ ) else (
84
+
85
+ echo %%a
86
+
87
+ )
88
+
89
+ )
90
+
91
+ )
92
+
93
+ )>%AFTER_CSV%
94
+
95
+ exit /b
96
+
97
+
98
+
99
+ rem csvの1項目目を取得する
100
+
101
+ :returnFirstColumn
102
+
103
+ for /f "delims=," %%i in (%1) do (
104
+
105
+ set %2=%%i
106
+
107
+ )
108
+
109
+ exit /b
110
+
111
+ ```
112
+
113
+ でしょうか。
114
+
115
+
116
+
117
+ 引用符に囲まれたりエスケープされたりしていないカンマは、ほとんどの場所で区切り文字になるので、
118
+
119
+ 1つの引数としてサブルーチンに引き渡したければ、
120
+
121
+ `call :returnFirstColumn "%AFTER_STRING_TOKYO%" TOKYO`
122
+
123
+ のように引用符で囲む必要があります。

1

訂正

2021/07/23 14:23

投稿

otn
otn

スコア84571

test CHANGED
@@ -14,9 +14,13 @@
14
14
 
15
15
  set AFTER_STRING_OSAKA=大阪,10,20
16
16
 
17
+ ~~~
18
+
19
+ call :returnFirstColumn %AFTER_TOKYO% TOKYO
20
+
21
+ call :returnFirstColumn %AFTER_OSAKA% OSAKA
22
+
17
23
  ```
18
-
19
- と同じ名前の変数に続けて違う値をセットしている。一方はおそらく`_STRING_`が無い変数名でしょう。
20
24
 
21
25
 
22
26