Windows 使用批处理文件以相同扩展名顺序重命名所有文件

Windows 使用批处理文件以相同扩展名顺序重命名所有文件,windows,for-loop,batch-file,Windows,For Loop,Batch File,我想这样重命名这些文件: File 1.pdf > 1.pdf File 2.pdf > 2.pdf .. File 10.pdf >10.pdf File 11.pdf >11.pdf File1 1.pdf >12.pdf File1 2.pdf >13.pdf .. 此代码正在运行,但未对其进行排序: @echo off & setlocal EnableDelayedExpansion set a=1 for /f

我想这样重命名这些文件:

File 1.pdf  > 1.pdf
File 2.pdf  > 2.pdf
..
File 10.pdf >10.pdf
File 11.pdf >11.pdf
File1 1.pdf >12.pdf      
File1 2.pdf >13.pdf
..
此代码正在运行,但未对其进行排序:

    @echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.pdf') do (
  ren "%%i" "!a!.pdf" 
  set /a a+=1
) 
结果是:

File 1.pdf  > 1.pdf
File 10.pdf > 2.pdf
File 11.pdf > 3.pdf

您可以测试
a
以查看它是否小于10,并向文件名添加一个零,如下所示:

if !a! LSS 10 ren "%%i" "0!a!.pdf" else ren "%%i" "!a!.pdf"
if !a! LSS 10 set newfile="00!a!" else if !a! LSS 100 set newfile="0!a!"

ren "%%i" "!newfile!.pdf"
如果要重命名的文件超过100个,可以如下所示:

if !a! LSS 10 ren "%%i" "0!a!.pdf" else ren "%%i" "!a!.pdf"
if !a! LSS 10 set newfile="00!a!" else if !a! LSS 100 set newfile="0!a!"

ren "%%i" "!newfile!.pdf"
总而言之,这对我很有用:

@echo off & setlocal EnableDelayedExpansion 

set a=1
for /f "delims=" %%i in ('dir /b *.pdf') do (
  set newfile="!a!"
  if !a! LSS 1000 set newfile="0!a!"
  if !a! LSS 100 set newfile="00!a!"
  if !a! LSS 10 set newfile="000!a!"

  ren "%%i" "!newfile!.pdf"
  set /a a+=1
)
Label
stage1
用空格填充文件名的2个标记,然后将每个标记的长度修剪为20个字符。每一行都与
“token1 padded”|“token2 padded”|“full filename”
相呼应,该文件名通过管道传输到
排序
,然后通过管道传输到标签
stage2
,以进行索引和重命名

如果测试正常,则删除
ren
命令前面的回声

输出:


它们现在分类正确了。数字以ASCII顺序显示,这意味着
1
10
,“11”是正确的。如果希望它们以不同的方式排序,请调整文件名,使其左键加零,使其位数相同(
01
02
,等等)。这将对它们进行更准确的数字排序。是的,我知道,谢谢,但我正在通过修改代码来搜索。谢谢!我已经试过了,但是没有用。我有1000个这样的文件(文件1到文件500,文件1到文件1500),我用
%newfile%
替换了
!新文件并让它为我工作。我添加了我正在使用的整个脚本。您是否检查了订单,它可以工作,但与订单(文件10.pdf重命名为002.pdf)不一致。对不起,我误解了问题所在。默认排序顺序不适用于您。迈克尔·希思的回答解决了这个问题。非常感谢!这对我很有用,你很聪明。