在Windows中,如果我想在cmd中找到文件的基本名称,我可以这样做:
for /F %i in (%newest_file%) do set FILENAME=%~ni%~xi
但是,如果%newest_file%
在Windows机器上确实不存在,例如
export/xiv0/webroot/Builds/client.is_11_3_1.win.RC1.4.140929.zip
我找不到文件。
在这种情况下我该怎么办?如何在Windows批处理中找到表示潜在文件的字符串的基本名称?
答案 0 :(得分:2)
摆脱/f
声明中的for
开关。
for %I in ("non existent file.txt") do @echo %~nI
将返回non existent file
。
顺便说一句,您还可以组合这些波浪形修改器。 %~nxI
将返回没有路径的名称+ ext。你不必做%~nI%~xI
。
答案 1 :(得分:2)
您使用的是错误的FOR
命令!您的FOR /F
命令将尝试打开文件并迭代每一行。所以它没有给出%newest_file%
的基本名称,即使它存在。相反,它将文件中的每一行视为文件名,并给出其基本名称。
此外,您可以将%~ni%~xi
合并到%~nxi
。
你想要的是一个简单的FOR
命令 - 无论文件是否存在,这都会起作用:
for %F in ("%newest_file%") do set "FILENAME=%~nxF"