将变量设置为for语句中的另一个变量

时间:2012-03-23 10:08:43

标签: command-line batch-file for-loop

我正在尝试将for语句的变量设置为另一个变量。当我这样做时:

for /f "tokens=* delims= " %%p in (plugins.txt) do set pp = %%p

它的工作正确。但我想做更多,所以我在之后做(现在它不起作用。为什么会这样,我该如何解决呢?

for /f "tokens=* delims= " %%p in (plugins.txt) do (
set pp = %%p
echo %pp%
echo %pp%
echo %%p)

编辑:添加了输入和所需的输出

plugins.txt的内容
http://subversion/svn/dotCMSPlugins/CustomLogin/trunk

期望的输出
CustomLogin

2 个答案:

答案 0 :(得分:3)

设置有效,但扩展按预期以其他方式工作。

百分比扩展将在解析括号内的那一刻完成,而不是在执行单个命令的那一刻完成。 How does cmd.exe parse scripts

顺便说一下。在set语句中使用空格不是一个好主意,因为它创建了一个带空格的变量,在您的情况下set pp = %%p创建一个名为pp<space>的变量,其值为<space><content of %%p

您可以使用延迟扩展来获得所需的结果。

setlocal EnableDelayedExpansion
for /f "tokens=* delims= " %%p in (plugins.txt) do (
  set "myVar=%%p"
  set "myVar=!myVar:subversion/svn/dotCMSPlugins/=!"
  set "myVar=!myVar:/trunk=!"
  echo !myVar!
)

答案 1 :(得分:2)

如果您的输入文件包含以下行:

subversion/svn/dotCMSPlugins/CustomLogin/trunk

你希望得到这个结果:

CustomLogin

然后最简单的方法是用/字符分隔标记行,并以这种方式取第4个标记:

setlocal EnableDelayedExpansion
for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
  set "myVar=%%p"
  echo !myVar!
)

如果FOR的目的只是为了得到这个结果,那么甚至不需要延迟扩展:

for /F "tokens=4 delims=/" %%p in (plugins.txt) do (
  set "myVar=%%p"
)
echo %myVar%