Batch file A12345678.textornumbers.textornumbers.txt至A12345678.txt

Batch file A12345678.textornumbers.textornumbers.txt至A12345678.txt,batch-file,Batch File,我尝试创建一个批处理文件来自动重命名文件夹中包含的文件,从以下结构:A12345678.textornumbers.textornumbers.txt改为更简单的结构:A12345678.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 :en

我尝试创建一个批处理文件来自动重命名文件夹中包含的文件,从以下结构:A12345678.textornumbers.textornumbers.txt改为更简单的结构:A12345678.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
for %%x in (*.textornumbers.txt) do (
  set nam=%%x
  if "!nam!" neq "!nam:.textornumbers=!" ren %%x !nam:.textornumbers=!
)
它不会返回任何错误,但不会执行任何操作

编辑:

好的,问题可以从另一个方面看:我想重命名文件,保留前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
但结果是:

大宗报价 !文件名!。文本

这是directoy中的第一个图像,其他图像存在错误(此类文件已经存在)

编辑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

这不是我的代码,而是我从其他人那里使用的解决方案()。我希望它能帮助其他有类似问题的人。谢谢你的想法和帮助

脚本确实做了一些事情,但没有任何用处-它将每个文件重命名为其原始名称:-(

这一切都与REN如何使用通配符的规则有关。我从未在任何地方看到过关于REN如何工作的任何正确解释。因此,几周前,我做了大量实验,并制定了一套规则来解释我观察到的所有行为

您可以在StackExchange超级用户站点上找到我的结果

用目标名称中的多个
替换
*
可以轻松解决问题。只需确保
的数量大于或等于要处理的最大前导名称长度。如果不更改值,也无需指定前导
A

for /r %%x in (A*.*.*.txt) do ren "%%x" ?????????????????????.txt
上面的代码必须迭代每个文件。只迭代文件夹可能会快一点,尽管我还没有测试过

for /r /d %%x in (.) do ren "%%x\A*.*.*.txt" ?????????????????????.txt
还可以使用FOR/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"

你也可以这样做:

@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
for %%x in (*.textornumbers.txt) do (
  set nam=%%x
  if "!nam!" neq "!nam:.textornumbers=!" ren %%x !nam:.textornumbers=!
)

使用
~
-修饰符,可以执行以下操作:

  • 仅从原始完整路径和名称(&扩展名)中获取名称:

    这将给您留下一个*.

  • 仅取#2中的名称:


    我认为
    ren
    命令不够聪明,无法猜出你的意图。@Joey-但ren足够灵活,可以完成任务:-)请看我的答案。请看我的修订答案,以获得对修订问题更简单的解决方案。
    FOR /R %%A IN (A*.*.*.txt) DO (
      FOR %%B IN ("%%~nA") DO (
        FOR %%C IN ("%%~nB") DO (
          ... %%~nC ...
        )
      )
    )
    FOR /R %%A IN (A*.*.*.txt) DO (
      FOR %%B IN ("%%~nA") DO (
        FOR %%C IN ("%%~nB") DO (
          RENAME "%%A" "%%~nC%%~xA"
        )
      )
    )