我尝试创建一个批处理文件来自动重命名文件夹中包含的文件,从这个结构: A12345678.textornumbers.textornumbers.txt到一个更简单的结构:A 12345678.txt
我试过这样的方法:
@echo off
ECHO Renaming files
Pause
:begin
ECHO Renaming txt files
for /r %%x in (A*.*.*.txt) do (REN "%%x" A*.txt)
ECHO Renaming finished
:end
pause
done它不返回任何错误,但它什么也不做.
编辑:
好的,这个问题可以从其他方面看出来:我想重命名文件的前9个字符和扩展名。
我在这里看到了一个类似的问题:从文件名中删除字符
我对我的情况进行了修改和调整,使之具有以下特点:
@echo off
ECHO Renaming files
Pause
:begin
REM setlocal enabledelayedexpansion (the result is the same with and without this line)
set X=9
ECHO Renaming files
for /r %%f in (*.txt) do if %%f neq %~nx0 (
set "filename=%%~nf"
set "filename=!filename:~%X%,-%X%!"
ren "%%f" "!filename!%%~xf")
ECHO Done
ECHO Processing finished
:end
pause
done但结果是:
封锁!文件名!.txt
这是目录中的第一个图像,而其他的则是错误(这种文件已经存在)。
编辑2:
感谢我在互联网上找到的回复和其他信息,下面是我的解决方案:删除文件名的最后几个字符,因为我希望保留前9个字符:
@echo off
ECHO renaming files
ECHO.
Pause
:begin
set ext=QUB
set num=17
FOR /f "tokens=*" %%f in ('dir /b /a *.%ext%') do call :lab %%f
ECHO Done
pause
Exit
:lab
set original=
set original=%*
set newname=
call set newname=%%original:.%ext%=%%
call set newname=%%newname:~0,-%num%%%.%ext%
if "%newname%"==".%ext%" (goto :eof)
ren "%original%" "%newname%"
ECHO %newname%
goto :eof这不是我的代码,而是我从别人那里使用的解决方案(由Carlitos.dll)。我希望这能对其他有类似问题的人有所帮助。谢谢你的想法和帮助!
发布于 2012-10-05 11:48:23
这个脚本确实做了一些事情,但是没有什么有用的--它将每个文件重命名为它的原始名称:-(
这一切都与任如何使用通配符有关。我从来没有见过对任的作品作任何适当的解释。所以几周前,我做了大量的实验,并制定了一套规则来解释我观察到的所有行为。
您可以在Windows重命名命令如何解释通配符?的StackExchange SuperUser站点上找到我的结果。
通过将*替换为目标名称中的许多?,您的问题很容易解决。只需确保?的数量大于或等于要处理的最大引号长度。如果不更改值,也不需要指定前面的A。
for /r %%x in (A*.*.*.txt) do ren "%%x" ?????????????????????.txt上述内容必须迭代每个文件。只迭代文件夹可能要快一些,尽管我还没有测试过
for /r /d %%x in (.) do ren "%%x\A*.*.*.txt" ?????????????????????.txt还可以解析/F的名称,这样您就不必担心?的数量了。
for /r %%x in (a*.*.*.txt) do (
for /f "delims=." %%n in ("%%~nx") do ren "%%x" "%%n.txt"
)基于修正问句的编辑
为了简单地保留前9个字符和.txt扩展,解决方案甚至更简单,只需使用9 ?
for /r /d %%x in (.) do ren "%%x\*.txt" ?????????.txt如果您想重命名所有文件,而不仅仅是.txt文件,那么
for /r %%F in (*) do ren "%%F" "?????????%%~xF"发布于 2012-10-07 07:57:35
你也可以这样做:
for %%x in (*.textornumbers.txt) do (
set nam=%%x
if "!nam!" neq "!nam:.textornumbers=!" ren %%x !nam:.textornumbers=!
)https://stackoverflow.com/questions/12744632
复制相似问题