windowsバッチで下記のbefore.csvからafter.csvのように変換をしたいと考えています。
if文のところの実装方法で躓いてしまいました。
そもそも、windowsバッチでこの処理は向いていない気もしてきたのですが、
実現可能でしょうか?
ご教授いただけると幸いです。
よろしくお願いいたします。
windowsBatch
1rem test.bat 2 3rem 定義 4set BEFORE_CSV=before.csv 5set AFTER_CSV=after.csv 6set BEFORE_STRING_TOKYO=東京 7set AFTER_STRING_TOKYO=東京,1,2 8set BEFORE_STRING_OSAKA=大阪 9set AFTER_STRING_OSAKA=大阪,10,20 10 11for /f "tokens=1 eol=#" %%a in (%BEFORE_CSV%) do ( 12 set line=%%a 13 if csvの一つ目の要素が東京だったら do (echo !!line:%BEFORE_STRING_TOKYO%=%AFTER_STRING_TOKYO%!!>>%AFTER_CSV%) 14 if csvの一つ目の要素が大阪だったら do (echo !!line:%BEFORE_STRING_OSAKA%=%AFTER_STRING_OSAKA%!!>>%AFTER_CSV%) 15)
csv
1#before.csv 2東京,3,4 3大阪,30,40 4
csv
1#after.csv 2東京,1,2,3,4 3大阪,10,20,30,40
追記
上記の処理で「csvの一つ目の要素が東京だったら 」としていた箇所を
「AFTER_XXXのCSVの一つ目の値とBEFORE_XXXの要素が一致している場合」
として汎用的に処理を書きたいと思っています。
下記のイメージで出来ると思ったのですが、
サブルーチンからうまく値を取得できません。
たびたび申し訳ございませんが、ご教授いただければ幸いです。
(AFTER_XXXはconfファイルへ外だしする予定の為、名称が変わった場合に改修を容易にしたいという背景です。)
windowsBatch
1rem test.bat 2 3~中略~ 4call :returnFirstColumn %AFTER_TOKYO% TOKYO 5call :returnFirstColumn %AFTER_OSAKA% OSAKA 6~中略~ 7 if "%%b"=="%TOKYO%" ( 8~中略~ 9rem csvの1項目目を取得する 10:returnFirstColumn 11setlocal 12 13for /f "delims=," %%i in ("%1") do ( 14 set val=%%i 15) 16endlocal && set %2=!val! 17exit /b 18
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/22 23:34