Windows批处理:分隔字符串中每个路径的调用函数

时间:2016-09-28 11:26:11

标签: batch-file

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

"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的值;还在。我哪里错了?

1 个答案:

答案 0 :(得分:2)

代码的问题是for /F逐行循环,而不是逐个令牌。更好的解决方案是在没有任何开关的情况下使用forfor将对数据进行标记,在未加引号的空格,逗号,分号和制表符上进行拆分。

为了防止包含空格或逗号的路径名被截断,您可以使用批处理变量子字符串替换来按下数据并用";"替换所有分号,然后用引号将整个事物包围起来。有关子字符串替换的完整详细信息,请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