20

私は次のバッチファイルを持っています

@echo off
setlocal EnableDelayedExpansion
for /f "delims==" %%J in (File_List.txt) do (
call :setDate %%J MYD
echo/Date is: %MYD%
)
endlocal &goto :eof

:setDate
SETLOCAL ENABLEEXTENSIONS
echo %1
echo %~2
set NAME=%1
set NAME=%NAME:~-11%
echo %NAME%
echo %~2
endlocal&set %2=%NAME%&goto :eof

ただし、file_List.txtにはfile2012-05.csvが含まれています

私は得る

file2012-05.csv
MYD
2012-05.csv
MYD
Date is:

実際に関数setDateを取得して、必要な値を返すにはどうすればよいですか?

4

2 に答える 2

29

スクリプトから何を達成したいのかわからないので、元の件名に(完全を期して)返信します。関数から値を返します。

これが私がそれをする方法です:

@echo off

set myvar=
echo %myvar%
call :myfunction myvar
echo %myvar%
goto :eof

:myfunction
set %1=filled
goto :eof

結果は次のとおりです。

empty 
filled
于 2015-06-08T14:32:12.703 に答える
21

バッチインタープリター%MYD%は解析時に評価し、その時点では空です。これが、拡張の遅延がある理由です。この行を変更します。

echo/Date is: %MYD%

これに:

echo/Date is: !MYD!

MYD実行時に評価するようにインタプリタに指示するため、希望どおりに機能します。

于 2012-07-10T18:16:44.097 に答える