我正在尝试将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
答案 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%