对于循环来解析路径中包含空格的文件,命令提示符

时间:2015-10-08 22:07:17

标签: batch-file for-loop xmlstarlet

有一个Windows命令提示行:

$in_handle

100多个目录中的一个在路径中有一个空格,并且该行在该目录上失败。名称必须保留。

尝试将for /F %i in ('dir /s /b D:\MyDirectory\filepath\File.xml') do (C:\progra~1\xmlstarlet\xml.exe ed --inplace -d "//xmlTag[data/url[contains(text(),'shop.companyname')]]" %i) 选项更改为delims,但在多个目录中失败。

还尝试^n但不理解语法,%~dp0,这使我“无法找到指定的文件”。

如何让Windows用空格解析该行?是否有"%~dp0\File.xml"选项?

3 个答案:

答案 0 :(得分:2)

要在dir中使用for loop扫描文件夹,您必须使用"delims=",因为默认delimsspace

for /f "delims=" %i in ('dir /s /b "D:\MyDirectory\filepath\*.xml"') do @( echo "%~i" )

我更新了示例,%i现在是双引号。因此,您的外部软件将被视为单个参数

正如@aschipfl所述,您可以更改为"%~i"。请参阅call /?for /? - 示例已更新

答案 1 :(得分:1)

除了delims=之外,您还可以使用tokens=来限制返回的令牌数量。尝试将其设置为1,*。这将为您提供%i表示第一个空格之前的所有内容,%j表示第一个空格之后的所有内容。

然后,在do部分,合并%i %j

示例:

for /F "tokens=1,*" %i in ('set') DO @echo %i %j

答案 2 :(得分:0)

实现此目的的另一种方法是告诉FOR整个行,空格和所有行都进入%i变量。

FOR /F "usebackq tokens=*" %i in (`DIR /S /B *.xml`) do (ECHO "%~i")