批量文件重命名文件数字不起作用

时间:2015-05-19 21:13:45

标签: batch-file

我有一个文件夹,我在其中执行print to file选项,它将我的打印作业保存为pcl文件。我用来打印文件的软件按以下方式命名每个文件:GUID.XX.pcl其中XX是数字。
例如:

View > Word Wrap

我想要做的是重命名文件,使它们看起来像这样:
1.pcl
2.pcl
3.pcl
等等。

这是我使用的批次:

{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.6.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.7.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.8.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.9.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.10.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.11.pcl

这可行,但问题是,在我上面给出的例子中 它重命名

for %%a in (*.pcl) do (
    set /a i+=1
    ren "%%a" "!i!.new"
)
ren *.new *.pcl

{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.10.pcl to 1.pcl

我需要它重命名

{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.6.pcl to 3.pcl

{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.6.pcl to 1.pcl

它基本上是在6之前看到10。有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

for /F "tokens=1-3 delims=." %%a in ('dir /B *.pcl') do (
   set /A num=100+%%b
   set "name[!num:~1!]=%%a.%%b.%%c"
)

for /F "tokens=2 delims==" %%a in ('set name[') do (
   set /A i+=1
   ren "%%a" "!i!.pcl"
)

如果您想在新名称中使用两位数字,那么订单会保留在dirfor个列表中,请以这种方式修改第二部分:

set i=100
for /F "tokens=2 delims==" %%a in ('set name[') do (
   set /A i+=1
   ren "%%a" "!i:~1!.pcl"
)

编辑:我测试了我的代码,它运行正常。这是测试会话的输出:

C:\> dir /b
test.bat
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.10.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.11.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.6.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.7.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.8.pcl
{2E594442-FDF9-4992-88DA-EA4ED2811ECD}.9.pcl

C:\> test

C:\> dir /b
1.pcl
2.pcl
3.pcl
4.pcl
5.pcl
6.pcl
test.bat

C:\> type test.bat
@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3 delims=." %%a in ('dir /B *.pcl') do (
   set /A num=100+%%b
   set "name[!num:~1!]=%%a.%%b.%%c"
)

for /F "tokens=2 delims==" %%a in ('set name[') do (
   set /A i+=1
   ren "%%a" "!i!.pcl"
)

答案 1 :(得分:0)

未经测试:

for  %%a in (*.pcl) do (
    for /f "tokens=2 delims=}" %%# in ("%%~nxa") do (
        ren "%%~fa" "%%#"
    )
)