Batch file 为什么在处理带有FOR的文件名列表时,只有文件名部分达到第一个空格输出?

Batch file 为什么在处理带有FOR的文件名列表时,只有文件名部分达到第一个空格输出?,batch-file,for-loop,vmware-workstation,Batch File,For Loop,Vmware Workstation,我正在尝试使用命令vmrun list从VMware workstation获取正在运行的虚拟机列表 for /F %%G in ('vmrun list') do echo %%~fG 问题是位于文件夹VMWare images中的虚拟机映像类似 “C:\VMWare Images\VMServer\My Test Server.vmx” 输出为 “C:\VMWare” 如何获取完整路径? 还是只有重命名我的文件夹和虚拟机的解决方案,使它们的名称不包含任何空格?您需要“tokens=*”才能

我正在尝试使用命令
vmrun list
从VMware workstation获取正在运行的虚拟机列表

for /F %%G in ('vmrun list') do echo %%~fG
问题是位于文件夹
VMWare images
中的虚拟机映像类似

“C:\VMWare Images\VMServer\My Test Server.vmx”

输出为

“C:\VMWare”

如何获取完整路径?
还是只有重命名我的文件夹和虚拟机的解决方案,使它们的名称不包含任何空格?

您需要
“tokens=*”
才能获得整行,而不是第一个空格前的子字符串:

 for /F "tokens=*" %%G in ('vmrun list') do echo %%~fG

您尚未更改/禁用/f分隔符空间/选项卡的默认
,因此请在('vmrun list')中插入
for/f“delims=“%%G”,执行echo%%~fG
挑剔:以获得整行禁用
“delims=“
”。结果几乎相同,
“tokens=*”
还将删除前导空格(有时可能需要)+1。
“tokens=*”
将使用默认分隔符普通空格和水平制表符执行行拆分,然后将前导空格/制表符后的所有内容分配给循环变量。没有文件路径的文件名可以以空格开头。因此,
“tokens=*”
不是处理文件名列表的最佳方法
“delims=“
定义了一个空的分隔符列表,它实际上禁用了行拆分。但是没有文件路径的文件名可以以
开头。因此,文件名的安全性是
“eol=|delims=“
delims^=^eol^=
,以处理所有文件,即使是带有空格或
的文件
位于文件名的开头。对于具有完整路径的文件名,可以安全地使用
“tokens=*”
,因为完整文件路径要么以驱动器号和冒号开头,要么在作为UNC路径时有两个反斜杠。当然,使用
“delims=“
”禁用行拆分行为并将竖线定义为任何文件/文件夹名称都不能包含的行尾字符,或者甚至不将任何字符定义为行尾字符,这样做的速度并不是很快。没有分隔符和eol字符需要奇怪的语法
delims^=^eol^=
,这两个选项周围没有双引号。