SET "prog=C:\Program Files (x86)\Common Files\Adobe"
SET "file=%prog%\Color\Profiles\%Value%"
FOR /f %%i IN ("%file%") DO (
ECHO filename=%%~ni
ECHO path=%%~fi
pause
)
结果:
filename =程序
路径= C:/程序
我需要path = C:\ Program Files(x86)\ Common Files \ Adobe \ Color \ Profiles \%Value% 和文件名%Value%no程序... THX。
答案 0 :(得分:2)
您编写的FOR /F
命令旨在处理用引号括起来的 A STRING 。这样,以下命令:
FOR /f %%i IN ("%file%") DO (
在%%i
变量中放置这样的字符串(“C:\ Program”)的第一个标记,%%~ni
尝试从这样的字符串中提取文件名!
如果要提取文件的名称 ,则应使用带有NO / F选项的普通FOR命令:
FOR %%i IN ("%file%") DO (
ECHO filename=%%~ni
ECHO path=%%~fi
pause
)
我的意思是,在这种情况下,您希望将%file%
变量内容作为文件名处理,而不是作为字符串,所以你应该使用一个普通的FOR
命令来处理文件(而不是FOR /F
来处理字符串)。
答案 1 :(得分:1)
如果您将FOR行更改为此,您将获得更接近您想要的结果:
FOR /f "DELIMS=" %%i IN ("%file%") DO (
OR
FOR /f "TOKENS=*" %%i IN ("%file%") DO (
指定的TOKENS和DELIMS解析选项允许FOR接受从%file%到%i的整个字符串并忽略空格。资料来源:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/for.mspx?mfr=true