Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line 将变量设置为for语句中的另一个变量_Command Line_Batch File_For Loop - Fatal编程技术网

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

Command line 将变量设置为for语句中的另一个变量,command-line,batch-file,for-loop,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) 编辑:添加输入

我试图将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

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

百分比扩展将在解析括号块时进行,而不是在执行单个命令时进行


顺便说一句,在set语句中使用空格不是一个好主意,因为它会创建一个带有空格的变量,在您的例子中,
set pp=%%p
会创建一个名为
pp
的变量,其值为
,设置会起作用,但扩展会以预期的其他方式起作用

百分比扩展将在解析括号块时进行,而不是在执行单个命令时进行


顺便说一句,在set语句中使用空格不是一个好主意,因为它会创建一个带有空格的变量,在您的例子中,
set pp=%%p
创建一个名为
pp
的变量,其值为
,如果您的输入文件包含以下行:

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%

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

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%


您确定要删除尾随空格吗?正如您的
delims=
一样,dojeb的答案解决了主要问题。但是在分配变量时要小心额外的空格。您可能需要
set pp=%%p
。您的代码
set pp=%%p
有额外的空格,因此变量名包含尾随空格,并且值已更改一个前导空格。@dbenham:Hmmm,这和我说的不一样吗?:-)@jeb:oops,确实是你说的。我第一次读你的答案时不知怎的漏掉了那句话。你确定要删除尾随空格,就像你的
delims=
you dojeb的答案解决了主要问题一样。但是在分配变量时要小心额外的空格。您可能需要
设置pp=%%p
。您的代码
set pp=%%p
有额外的空格,因此变量名包含一个尾随空格,值包含一个前导空格。@dbenham:Hmmm,这和我说的不一样吗?:-)@杰布:哎呀,确实是这样。我第一次读你的答案时,不知怎的漏掉了这句话。啊,好吧,我明白了,但我现在怎么能用这个词做点什么呢!var?这是我想做的,但没用。。设置myVar!=!迈瓦尔:!我把它加入了我的样品中。在set语句中仅使用
myVar
作为变量名,而不是
!迈瓦尔。set的语法是
set=
set“=”
,第二种形式确保不会在末尾附加不需要的空格。仍然不能100%工作,但我们已经接近了!)我想要的是下面的句子将字符串分开,这样我就得到了最终的答案:CustomLogin subversion/svn/dotCMSPlugins/CustomLogin/trunk/subversion/svn/dotCMSPlugins/=/trunk/=你应该编辑你的问题:告诉我们你从plugins.txt中得到了哪一行,你希望输出结果是什么,我想当我有了这个变量后,我可以自己做,但它现在对我不起作用!这是我放在字符串中的字符串:这是我想要从输出中得到的:CustomLoginAah好的,我明白了,但是我现在如何处理!var?这是我想做的,但没用。。设置myVar!=!迈瓦尔:!我把它加入了我的样品中。在set语句中仅使用
myVar
作为变量名,而不是
!迈瓦尔。set的语法是
set=
set“=”
,第二种形式确保不会在末尾附加不需要的空格。仍然不能100%工作,但我们已经接近了!)我想要的是下面的句子将字符串分开,这样我就得到了最终的答案:CustomLogin subversion/svn/dotCMSPlugins/CustomLogin/trunk/subversion/svn/dotCMSPlugins/=/trunk/=你应该编辑你的问题:告诉我们你从plugins.txt中得到了哪一行,你希望输出结果是什么,我想当我有了这个变量后,我可以自己做,但它现在对我不起作用!这是我放在字符串中的字符串:这是我想要从输出中得到的:CustomLogin这是我想要使用的一种非常好的方式。只有一个问题。我需要两者,完整的URL和“第五个令牌”。所以我认为这是最好的方法:对于/f“tokens=*delims=”%p in(plugins.txt)do(设置“Var=%%p”for/f“tokens=5 delims=/”%c in(%%p)do(设置“myVar=%%c”)执行一些操作),但他在第二个标记中找不到第五个。@Gynnad:p必须用引号括起来。另外,我建议您使用“delims=”而不是“tokens=*delims=”来获取整行:
for/F“delims=”%%p in(plugins.txt)do(设置“Var=%%p”for/F“tokens=5 delims=/”%%c in(“%%p”)do(设置“myVar=%%c”)do SOME ACTIONS)
这是我想要使用的一种非常好的方法。只有一个问题。我需要两者,完整的URL和“第五个令牌”。所以我认为这是最好的方法:对于/f“tokens=*delims=”%p in(plugins.txt)do(设置“Var=%%p”for/f“tokens=5 delims=/”%c in(%%p)do(设置“myVar=%%c”)执行一些操作),但他在第二个标记中找不到第五个。@Gynnad:p必须用引号括起来。此外,我建议您使用“delims=”而不是“tok”