有一个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"
选项?
答案 0 :(得分:2)
要在dir
中使用for loop
扫描文件夹,您必须使用"delims="
,因为默认delims
为space
。
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")