首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >A12345678.textornumbers.textornumbers.txt到A 12345678.txt

A12345678.textornumbers.textornumbers.txt到A 12345678.txt
EN

Stack Overflow用户
提问于 2012-10-05 10:49:08
回答 2查看 221关注 0票数 4

我尝试创建一个批处理文件来自动重命名文件夹中包含的文件,从这个结构: A12345678.textornumbers.textornumbers.txt到一个更简单的结构:A 12345678.txt

我试过这样的方法:

代码语言:javascript
复制
@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个字符和扩展名。

我在这里看到了一个类似的问题:从文件名中删除字符

我对我的情况进行了修改和调整,使之具有以下特点:

代码语言:javascript
复制
@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个字符:

代码语言:javascript
复制
@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)。我希望这能对其他有类似问题的人有所帮助。谢谢你的想法和帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-05 11:48:23

这个脚本确实做了一些事情,但是没有什么有用的--它将每个文件重命名为它的原始名称:-(

这一切都与任如何使用通配符有关。我从来没有见过对任的作品作任何适当的解释。所以几周前,我做了大量的实验,并制定了一套规则来解释我观察到的所有行为。

您可以在Windows重命名命令如何解释通配符?的StackExchange SuperUser站点上找到我的结果。

通过将*替换为目标名称中的许多?,您的问题很容易解决。只需确保?的数量大于或等于要处理的最大引号长度。如果不更改值,也不需要指定前面的A

代码语言:javascript
复制
for /r %%x in (A*.*.*.txt) do ren "%%x" ?????????????????????.txt

上述内容必须迭代每个文件。只迭代文件夹可能要快一些,尽管我还没有测试过

代码语言:javascript
复制
for /r /d %%x in (.) do ren "%%x\A*.*.*.txt" ?????????????????????.txt

还可以解析/F的名称,这样您就不必担心?的数量了。

代码语言:javascript
复制
for /r %%x in (a*.*.*.txt) do (
  for /f "delims=." %%n in ("%%~nx") do ren "%%x" "%%n.txt"
)

基于修正问句的编辑

为了简单地保留前9个字符和.txt扩展,解决方案甚至更简单,只需使用9 ?

代码语言:javascript
复制
for /r /d %%x in (.) do ren "%%x\*.txt" ?????????.txt

如果您想重命名所有文件,而不仅仅是.txt文件,那么

代码语言:javascript
复制
for /r %%F in (*) do ren "%%F" "?????????%%~xF"
票数 4
EN

Stack Overflow用户

发布于 2012-10-07 07:57:35

你也可以这样做:

代码语言:javascript
复制
for %%x in (*.textornumbers.txt) do (
  set nam=%%x
  if "!nam!" neq "!nam:.textornumbers=!" ren %%x !nam:.textornumbers=!
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12744632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档