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