在批处理中:从包含路径和文件名的变量中仅读取文件名

7
我正在寻找一种方法,在批处理中接收一个变量并仅解析文件名。
例如,我从另一个应用程序传递了一个-s参数给我的批处理文件,随后设置为我的源变量。源文件变量通常包含类似于:C:\Program Files\myapp\Instance.1\Data\filetomove.ext。
我假设从变量的末尾开始读取直到第一个“\”,并将结果设置为新变量文件名,但我无法成功使用“for /f”命令。
任何帮助都将不胜感激!
更新:仅可用标准XP或Windows 2000/2003…(不能假定已安装资源工具包)。
2个回答

9
如果它作为脚本的参数传入,即%1、%2等,您可以按照以下方式将文件名和扩展名提取到变量中:
set FILENAME=%~nxN

其中N是参数的索引。例如,这个脚本将只回显第一个参数的文件名:

@echo off
set FILENAME=%~nx1
echo %FILENAME%

谢谢!我重新阅读了帮助文档,发现自己过于复杂化了%~nxI指令。感谢! - Michael
是的。如果你足够幸运找到了那些指令,它们真的很糟糕。 - Dave Ray
+1 我也差点问这个问题,Stack Overflow 有一个很好的重复问题检测器 :-) - Wim Coenen
2
不幸的是,如果名称中有“&”字符,此指令似乎会出现问题。我刚遇到一个名为“NGC&Wii”的目录的问题。显然,可以更改名称,但在某些情况下,您可能无法更改它。 - Cyan

2
稍微改进的版本:
set FILENAME="%~nx1"

额外的圆括号将确保特殊字符(例如'&')在批处理执行期间不会干扰。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接