2

バッチ スクリプトで CSV ファイルの内容を読み取る際に問題が発生しています。と言う一連のファイルがありますMy_A_File.csv, My_B_File.csv ... My_Z_File.csv。私が直面していた問題は、それらの特殊文字を読み取ることです。したがって、delayedexpansion をオフにして値を読み取りたいと考えました。

遅延拡張が無効になっているブロックの値を読み取ると、値が空です! どうすればこれを処理できますか?

脚本:

@echo off
setlocal enabledelayedexpansion
for /L %%g in (65,1,90) do (
    cmd /c exit /b %%g
    set codeval=!=ExitCodeAscii!
    set fileToReadFrom=My_!codeval!_File.csv

    if exist My_!codeval!_File.csv (
        echo Outer-!fileToReadFrom!
        echo Outer-!codeval!
        setlocal disabledelayedexpansion
        echo Inner-%fileToReadFrom%
        echo Inner-%codeval%
        endlocal
    )
)

出力:

Outer-My_A_File.csv
Outer-A
Inner-
Inner-
4

2 に答える 2

3

これは、遅延展開がどのように機能するかを示しています。ただし、変数にアクセスすることはできますCALLが、これはパフォーマンスになります( CALL FORはできないことに注意してください):

@echo off
setlocal enabledelayedexpansion
for /L %%g in (65,1,90) do (
    cmd /c exit /b %%g
    set codeval=!=ExitCodeAscii!
    set fileToReadFrom=My_!codeval!_File.csv

    if exist My_!codeval!_File.csv (
        echo Outer-!fileToReadFrom!
        echo Outer-!codeval!
        setlocal disabledelayedexpansion
          call echo Inner-%%fileToReadFrom%%
          call echo Inner-%%codeval%%
        endlocal
    )
)

またはパイプを使用することもできます。これもパフォーマンスに影響します(使用できるようになりました break|for "usebackq" %%a in ("Inner-%%fileToReadFrom%%") do @echo %%~a):

@echo off
setlocal enabledelayedexpansion
for /L %%g in (65,1,90) do (
    cmd /c exit /b %%g
    set codeval=!=ExitCodeAscii!
    set fileToReadFrom=My_!codeval!_File.csv

    if exist My_!codeval!_File.csv (
        echo Outer-!fileToReadFrom!
        echo Outer-!codeval!
        setlocal disabledelayedexpansion
           break|echo Inner-%%fileToReadFrom%%
           break|echo Inner-%%codeval%%
        endlocal
    )
)
于 2016-03-23T16:56:14.103 に答える
3
于 2016-03-23T20:54:38.210 に答える