我有一个包含以下内容的变量:
"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的值;还在。我哪里错了?
答案 0 :(得分:2)
代码的问题是for /F
逐行循环,而不是逐个令牌。更好的解决方案是在没有任何开关的情况下使用for
。 for
将对数据进行标记,在未加引号的空格,逗号,分号和制表符上进行拆分。
为了防止包含空格或逗号的路径名被截断,您可以使用批处理变量子字符串替换来按下数据并用";"
替换所有分号,然后用引号将整个事物包围起来。有关子字符串替换的完整详细信息,请See this page。
基本上,
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:\手工艺\ CraftingExample.unity
D:\ ResMan \ FFResManExample.Unity