[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理读文件的顺序问题

我想按顺序读取文件 ,可是我读出来的是下面这样的
"_P_1.JPG"
"_P_10.JPG"
"_P_11.JPG"
"_P_12.JPG"
"_P_13.JPG"
"_P_14.JPG"
"_P_15.JPG"
"_P_16.JPG"
"_P_17.JPG"
"_P_18.JPG"
"_P_19.JPG"
"_P_2.JPG"
"_P_20.JPG"
"_P_21.JPG"
"_P_22.JPG"
"_P_23.JPG"
"_P_24.JPG"
"_P_25.JPG"
"_P_26.JPG"
"_P_27.JPG"
"_P_28.JPG"
"_P_29.JPG"
"_P_3.JPG"
"_P_30.JPG"
"_P_31.JPG"

有没有办法让他按正常的顺序读呢?

这个是系统问题,我们在窗口里看文件时,他是按正常理解的顺序来显示的。但是在dos里来读取显示顺序就会如上例。

如果需要对文件依次处理,可以利用for /l ,只是看看就不要计较。

for /l %%i in (1,1,50) do if exist "_P_%%i.jpg" echo _P_%%i.jpg

我的代码成功率差,没有经过测试不算成功。上面只是基本思路表达。
1

评分人数

目的,学习批处理

TOP

回复 2# hlzj88


    这样可以,那如果 是按文本内容改名呢,也

就是 1号对应 文本中的第一个名字,

2号对应该文本中的第二个名字
我的代码是下面的 ,我感觉 错了
帮我看一下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ("经理.txt") do (
  3. for /l %%i in (1,1,56) do (
  4. if exist "_P_%%i.jpg" (
  5. ren "_P_%%i.jpg" "%%a.jpg" )
  6. )
复制代码

TOP

回复 1# swanseabrian
实际上你读出来才是正常顺序。
电脑不是人脑,它是读取的规则是:先按第一个字符排序,第一个字符相同再比较第二个字符进行排序,依次类推。所以会得到你看到的情况。
具体字符顺序请参照帖子http://www.bathome.net/thread-6851-1-1.html中所述。
如果像你顶楼那种情况数字是连续的话,代码可以牵强的这么写:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /a-d *.JPG') do (
  4.     set /a n+=1
  5.     echo,_P_!n!.JPG
  6. )
  7. pause
复制代码

TOP

回复 4# qixiaobin0715


    按文本内容改名怎么弄

TOP

本帖最后由 qixiaobin0715 于 2021-12-3 22:47 编辑

如果文件名中的数字是连续且文件与文件中的文本一一对应:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (经理.txt) do (
  3. set /a n+=1
  4. ren "_P_!n!.jpg" "%%a.jpg"
  5. )
  6. pause
复制代码
代码未经测试
1

评分人数

TOP

回复 6# qixiaobin0715


    我想到这了,都没写,还是你厉害

TOP

回复 7# swanseabrian
如果数字不连续,应当也能实现。思路:
在循环中使用call跳出循环外,然后使用goto语句找出下一个数字。

TOP

回复 8# qixiaobin0715


    应该不会有这么变态的需求了吧

TOP

本帖最后由 qixiaobin0715 于 2021-12-7 10:17 编辑

有的,我见过更麻烦的,文件名要求按月份日期排列:
2-5.jpg
2-6.jpg
2-15.jpg
10-7.jpg
10-8.jpg
10-25.jpg
dir顺序应当是:
10-25.txt
10-7.txt
10-8.txt
2-15.txt
2-5.txt
2-6.txt

TOP

返回列表