我不明白你为什么不能使用批处理文件。但这是一个适用于大多数文件名的解决方案。
关键 - 首先你必须确保你有一个未定义的变量名,我将使用 fname
set "fname="
接下来是实际执行重命名的命令。如果 fname 已经定义,它将无法正常工作。
for %a in (prefix*.txt) do @(set "fname=%a" & call ren "%fname%" "%fname:*prefix=%")
为每次迭代定义 fname 变量,然后语法 %fname:*prefix=% 将第一次出现的“前缀”替换为空。棘手的是 Windows 在第一次解析命令时首先尝试扩展 %fname%。当然这行不通,因为它还没有被定义。如果未找到变量,则在命令行上保留百分比。 CALL 会导致一个额外的扩展阶段发生在变量设置之后,因此扩展工作。
如果在运行命令之前定义了 fname,那么它只会尝试为每次迭代重命名同一个文件,而不是在循环中分配的值。
如果要使用不同的前缀再次运行命令,则必须先再次清除定义。
EDIT - 这是一个名为“RemovePrefix.bat”的批处理文件
::RemovePrefix.bat prefix fileMask
@echo off
setlocal
for %%A in ("%~1%~2") do (
set "fname=%%~A"
call ren "%%fname%%" "%%fname:*%~1=%%"
)
假设您有名为 "prefixName.txt" 的文件,那么您将通过执行来使用该脚本
RemovePrefix "prefix" "*.txt"
批处理文件将重命名您当前目录中的文件。除非批处理文件存在于 PATH 变量中的目录中,否则批处理文件也必须位于当前目录中。或者您可以在调用时指定批处理文件的完整路径。
批处理文件的扩展规则不同。 FOR 变量必须被引用为 %%A 而不是 %A,并且 %%fname%% 最初不扩展,而是将双百分号转换为单百分号,然后在 CALL 后扩展 %fname%。批处理文件是否已经定义了 fname 并不重要。 SETLOCAL 使 fname 的定义临时(本地)到批处理文件。