2012-03-23 148 views
1

我试图将for语句的变量设置为另一个变量。当我这样做时:将变量设置为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

确定 – jeb 2012-03-23 10:34:27

+0

jeb的回答解决了主要问题。但是在分配变量时要小心多余的空格。你可能想'设置pp = %% p'。你的代码'set pp = %% p'有多余的空格,所以变量名包含一个尾随空格,并且该值有一个前导空格。 – dbenham 2012-03-23 11:44:05

+0

@dbenham:嗯,这是不是我说的一样? :-) – jeb 2012-03-23 12:09:22

回答

3

该组虽然工作,但扩张以其他方式按预期工作。

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

Btw。在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! 
) 
+0

啊,好吧,我明白了,但我现在该怎么做!var! ?这是我想要做的,但不起作用.. set!myVar!=!myVar:http:// subversion/svn/dotCMSPlugins/=! – Gynnad 2012-03-23 10:42:41

+0

我在我的示例中添加了它。在set语句中只使用'myVar'作为变量名,而不是'!myVar!'。 set的语法是'SET <变量名> = '或者'SET <变量名> = “',第二种形式确保不在末尾追加不需要的空格。 – jeb 2012-03-23 10:47:40

+0

仍然无法正常工作,但我们正在接近!:)我想的是,这下面的句子分割字符串,所以我得到的最终答案:CustomLogin 颠覆/ SVN/dotCMSPlugins/CustomLogin /主干/ 颠覆/ SVN/dotCMSPlugins/= /主干/ = – Gynnad 2012-03-23 11:05:28

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的目的只是为了得到这样的结果,那么推迟扩张甚至没有必要:您要删除尾部的空格,与你的`delims = `你做

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

不错的主意,与此令牌 – jeb 2012-03-25 07:13:36

+0

这是一个非常好的办法解决这个问题是我想使用,只有一个问题,我需要这两个,完整的URL和'第五令牌'。所以我认为这是最好的方式:对于/ f“tokens = * delims =”%% p in(plugins.txt )do(设置“Var = %% p” for/F“tokens = 5 delims = /”%% c in(%% p)do(set“myVar = %% c”)做一些动作)但他可以在第二个找到第五个标记为 – Gynnad 2012-03-26 07:08:15

+0

@Gynnad:%% p必须用引号括起来,另外,我建议你使用“delims =”而不是“tokens = * delims =”来获取整行('%% p“)中设置”var = %% p“for/F”tokens = 5 delims = /“%% p in(plugins.txt)do做(设置“myVar = %% c”)做一些行动)'' – Aacini 2012-03-26 18:36:42

相关问题