批处理脚本 - 参数嵌套内部变量?

时间:2013-09-24 17:32:35

标签: variables batch-file parameters

以下是该方案:

我有一个父脚本,它调用了十几个子脚本,其中一个是一个有点复杂的文件夹/文件同步操作。每个子脚本都将一个变量写入批处理文件(例如variable.bat),然后在下次执行时由父脚本加载。

文件夹同步脚本根据通过父脚本传递给它的参数从大型文件夹列表中选择。

子脚本的SET命令如下所示:

ECHO SET pair-folder-%1=yes>>c:\variable.bat

这将在下一次运行时生成一个由父脚本加载的变量。这就是问题:我如何编写一个动作(通过IF陷阱)来编写下一次子脚本出现时调用该变量的动作?我想我的IF陷阱看起来像这样:

IF %pair-folder-%1%=yes GOTO nopair

问题是我似乎无法让批处理正确解释 - 我尝试使用延迟扩展等几种不同的方式嵌套变量。是否有必要先将参数映射到局部变量?

基本上,一旦父脚本在下次执行时调用variable.bat,我如何从子脚本中引用新设置的变量?

1 个答案:

答案 0 :(得分:0)

由于您要将set pair-folder-%1=yes行附加到variable.bat,因此您会varable.bat建立一组pair-folder-*变量。

现在,如果您想检查是否设置了pair-folder-%,那么

if defined pair-folder-%1 ...

会为你做到这一点。

如果你想找到pair-folder-%1的值(即它不仅仅是设置或未设置),那么

set "valuefound="
for /f "tokens=1*delims==" %%i in ( 'set pair-folder-%1 2^>nul' ) do (
 if /i "%%i"=="pair-folder-%1" set "valuefound=%%j"
)

应该这样做 - 如果变量未定义,则valuefound将“设置”为无值(即未定义),否则为其值。