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.unityD:\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.unityD:\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很高兴我能帮忙!