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/2/apache-kafka/3.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
Batch file Windows批处理:以分隔字符串形式为每个路径调用函数_Batch File - Fatal编程技术网

Batch file Windows批处理:以分隔字符串形式为每个路径调用函数

Batch file Windows批处理:以分隔字符串形式为每个路径调用函数,batch-file,Batch File,我有一个包含以下内容的变量: "pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity;" 我想为每个路径调用一个函数,路径之间用;我目前拥有的代码是 for /F "del

我有一个包含以下内容的变量:

"pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity;"
我想为每个路径调用一个函数,路径之间用;我目前拥有的代码是

for /F "delims=;" %%a in ("%pdfList%") do (@echo %%a)
但这只是在重复以下内容

D:\BundleManager\AssetPackageManager.unity

我尝试将
tokens=*
设置为一个选项,但这只是响应pdfList complete的值;仍然存在。我哪里出错了?

您的代码的问题是,
for/F
逐行循环,而不是逐个令牌循环。更好的解决方案是使用
for
而不使用任何开关
for
将标记数据,并在不带引号的空格、逗号、分号和制表符上拆分

为了防止包含空格或逗号的路径名被截断,您可以使用批处理变量子字符串替换将数据和所有分号替换为
“;”
,然后用引号括起来。有关子字符串替换的详细信息

所以基本上

a;b c;d e;f
a";"b c";"d e";"f
变成

"a";"b c";"d e";"f"
变成

"a";"b c";"d e";"f"
它很容易标记,并且保留了空格。将此原则应用于上述代码:

@echo off & setlocal

set "pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity"

for %%a in ("%pdfList:;=";"%") do echo(%%~a
现在输出为:

D:\BundleManager\AssetPackageManager.unity
D:\BundleManager\AssetPackageManager.unity.vs\AssetPackageManager.unity
D:\Crafting\CraftingExample.unity
D:\ResMan\FFResManExample.Unity


代码的问题是,
for/F
逐行循环,而不是逐个令牌循环。更好的解决方案是使用
for
而不使用任何开关
for
将标记数据,并在不带引号的空格、逗号、分号和制表符上拆分

为了防止包含空格或逗号的路径名被截断,您可以使用批处理变量子字符串替换将数据和所有分号替换为
“;”
,然后用引号括起来。有关子字符串替换的详细信息

所以基本上

a;b c;d e;f
a";"b c";"d e";"f
变成

"a";"b c";"d e";"f"
变成

"a";"b c";"d e";"f"
它很容易标记,并且保留了空格。将此原则应用于上述代码:

@echo off & setlocal

set "pdfList=D:\BundleManager\AssetPackageManager.unity;D:\BundleManager\AssetPackageManager.unity\.vs\AssetPackageManager.unity;D:\Crafting\CraftingExample.unity;D:\ResMan\FFResManExample.Unity"

for %%a in ("%pdfList:;=";"%") do echo(%%~a
现在输出为:

D:\BundleManager\AssetPackageManager.unity
D:\BundleManager\AssetPackageManager.unity.vs\AssetPackageManager.unity
D:\Crafting\CraftingExample.unity
D:\ResMan\FFResManExample.Unity


请在(“%pdfList:;=”;“%”)中尝试%%a(@echo%%~a)是的,看起来很有效,谢谢。如果您想将其添加为答案而不是注释,并解释发生了什么,我会将其标记为正确:)Shorter:
echo%pdflist:=&echo/%
在(“%pdfList:;=”;“;“%”)中尝试%%a(@echo%%~a)是的,看起来很有效,谢谢。如果您想将其添加为答案而不是注释,并解释发生了什么,我会将其标记为正确:)Shorter:
echo%pdflist:=&echo/%
非常感谢:)@RealWorld很高兴我能帮忙!非常感谢:)@RealWorld很高兴我能帮忙!