Windows 批处理文件:当传递给函数的参数包含空格时,如何让函数返回值?
我会尽量解释清楚。我的场景以一个txt文件cases.txt开始,该文件包含两行:Windows 批处理文件:当传递给函数的参数包含空格时,如何让函数返回值?,windows,batch-file,spaces,Windows,Batch File,Spaces,我会尽量解释清楚。我的场景以一个txt文件cases.txt开始,该文件包含两行: line1 () CASE1 line2 () CASE 2 批处理文件使用FOR循环遍历该文件,并将每一行传递给函数find_index,该函数提取(并应返回)字符的位置。以下是我无法使用的代码: @ECHO off SETLOCAL ENABLEDELAYEDEXPANSION FOR /f "delims=" %%a IN (cases.txt) DO ( ECHO %%a CALL :
line1 () CASE1
line2 () CASE 2
批处理文件使用FOR循环遍历该文件,并将每一行传递给函数find_index,该函数提取(并应返回)字符的位置。以下是我无法使用的代码:
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%a IN (cases.txt) DO (
ECHO %%a
CALL :find_index %%a INDEX
ECHO Found index at !INDEX!
)
GOTO :EOF
:find_index
set S=%*
set I=0
set L=-1
:l
if "!S:~%I%,1!"=="" goto ld
if "!S:~%I%,1!"==")" set L=%I%
set /a I+=1
goto l
:ld
SET %2 = %L%
ECHO %2
GOTO :EOF
我想要发生的是,传递给函数的“索引”被分配了结果的值,然后我可以将其用于进一步的操作(因为我被卡住了,所以我还没有编写脚本)。发生的情况是,为%2分配了字符串()中第二个单词的值,该字符串作为参数传递给函数。样本输出为:
line1 () CASE1
()
Index is at
line2 () CASE 2
()
Index is at
预期的输出是为ECHO%2
返回7
,最终的输出是为读取索引为7
我做错了什么?任何帮助都将不胜感激
谢谢大家!
Andrew在脚本中,从头到尾都是变量!指数在任何地方都没有定义。您的索引值实际上存储在变量
中!我
并且您不需要该函数:ld
。请参阅下面修改的脚本和示例输出
@ECHO off
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%a IN (cases.txt) DO (
ECHO %%a
CALL :find_index %%a INDEX
ECHO Found index at !L!
)
GOTO :EOF
:find_index
set S=%*
set I=0
set L=-1
:l
if "!S:~%I%,1!"=="" goto :EOF
if "!S:~%I%,1!"==")" set L=%I%
set /a I+=1
goto l
GOTO :EOF
测试输出-
D:\Scripts>type cases.txt
line1 () CASE1
line2 () CASE 2
sometext () case3
D:\Scripts>
D:\Scripts>
D:\Scripts>
D:\Scripts>draft.bat
line1 () CASE1
Found index at 7
line2 () CASE 2
Found index at 7
sometext () case3
Found index at 10
干杯,G