swanseabrian
发短消息
加为好友
swanseabrian
当前离线
UID61034 帖子237 精华0 积分312 PB312 技术0 捐助0 阅读权限20 在线时间202 小时 注册时间2013-5-31 最后登录2022-10-27
五级士官
帖子237 积分312 技术0 捐助0 注册时间2013-5-31
1楼
跳转到 »
倒序看帖
打印
字体大小: tT
发表于 2021-12-3 21:21
| 只看该作者
[文件操作] [已解决]批处理读文件的顺序问题
我想按顺序读取文件 ,可是我读出来的是下面这样的
"_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"
有没有办法让他按正常的顺序读呢?
收藏
分享
hlzj88
发短消息
加为好友
hlzj88
当前离线
UID6278 帖子840 精华0 积分1653 PB1465 技术56 捐助20 阅读权限60 来自青海西宁 在线时间319 小时 注册时间2008-11-3 最后登录2025-8-25
少校
帖子840 积分1653 技术56 捐助20 注册时间2008-11-3
2楼
发表于 2021-12-3 21:36
| 只看该作者
这个是系统问题,我们在窗口里看文件时,他是按正常理解的顺序来显示的。但是在dos里来读取显示顺序就会如上例。
如果需要对文件依次处理,可以利用for /l ,只是看看就不要计较。
for /l %%i in (1,1,50) do if exist "_P_%%i.jpg" echo _P_%%i.jpg
我的代码成功率差,没有经过测试不算成功。上面只是基本思路表达。
1
评分人数
swanseabrian:
感谢分享,你这个也厉害技术 + 1
目的,学习批处理
TOP
swanseabrian
发短消息
加为好友
swanseabrian
当前离线
UID61034 帖子237 精华0 积分312 PB312 技术0 捐助0 阅读权限20 在线时间202 小时 注册时间2013-5-31 最后登录2022-10-27
五级士官
帖子237 积分312 技术0 捐助0 注册时间2013-5-31
3楼
发表于 2021-12-3 22:04
| 只看该作者
回复 2# hlzj88
这样可以,那如果 是按文本内容改名呢,也
就是 1号对应 文本中的第一个名字,
2号对应该文本中的第二个名字
我的代码是下面的 ,我感觉 错了
帮我看一下@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ("经理.txt") do (
for /l %%i in (1,1,56) do (
if exist "_P_%%i.jpg" (
ren "_P_%%i.jpg" "%%a.jpg" )
)复制代码
TOP
qixiaobin0715
发短消息
加为好友
qixiaobin0715
当前离线
UID74702 帖子2877 精华0 积分4235 PB2909 技术442 捐助0 阅读权限90 在线时间5030 小时 注册时间2016-2-20 最后登录2024-12-31
大校
帖子2877 积分4235 技术442 捐助0 注册时间2016-2-20
4楼
发表于 2021-12-3 22:13
| 只看该作者
回复 1# swanseabrian
实际上你读出来才是正常顺序。
电脑不是人脑,它是读取的规则是:先按第一个字符排序,第一个字符相同再比较第二个字符进行排序,依次类推。所以会得到你看到的情况。
具体字符顺序请参照帖子http://www.bathome.net/thread-6851-1-1.html中所述。
如果像你顶楼那种情况数字是连续的话,代码可以牵强的这么写:@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /a-d *.JPG') do (
set /a n+=1
echo,_P_!n!.JPG
)
pause复制代码
TOP
swanseabrian
发短消息
加为好友
swanseabrian
当前离线
UID61034 帖子237 精华0 积分312 PB312 技术0 捐助0 阅读权限20 在线时间202 小时 注册时间2013-5-31 最后登录2022-10-27
五级士官
帖子237 积分312 技术0 捐助0 注册时间2013-5-31
5楼
发表于 2021-12-3 22:25
| 只看该作者
回复 4# qixiaobin0715
按文本内容改名怎么弄
TOP
qixiaobin0715
发短消息
加为好友
qixiaobin0715
当前离线
UID74702 帖子2877 精华0 积分4235 PB2909 技术442 捐助0 阅读权限90 在线时间5030 小时 注册时间2016-2-20 最后登录2024-12-31
大校
帖子2877 积分4235 技术442 捐助0 注册时间2016-2-20
6楼
发表于 2021-12-3 22:42
| 只看该作者
本帖最后由 qixiaobin0715 于 2021-12-3 22:47 编辑
如果文件名中的数字是连续且文件与文件中的文本一一对应:@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (经理.txt) do (
set /a n+=1
ren "_P_!n!.jpg" "%%a.jpg"
)
pause复制代码代码未经测试
1
评分人数
swanseabrian:
感谢分享技术 + 1
TOP
swanseabrian
发短消息
加为好友
swanseabrian
当前离线
UID61034 帖子237 精华0 积分312 PB312 技术0 捐助0 阅读权限20 在线时间202 小时 注册时间2013-5-31 最后登录2022-10-27
五级士官
帖子237 积分312 技术0 捐助0 注册时间2013-5-31
7楼
发表于 2021-12-3 23:04
| 只看该作者
回复 6# qixiaobin0715
我想到这了,都没写,还是你厉害
TOP
qixiaobin0715
发短消息
加为好友
qixiaobin0715
当前离线
UID74702 帖子2877 精华0 积分4235 PB2909 技术442 捐助0 阅读权限90 在线时间5030 小时 注册时间2016-2-20 最后登录2024-12-31
大校
帖子2877 积分4235 技术442 捐助0 注册时间2016-2-20
8楼
发表于 2021-12-4 13:35
| 只看该作者
回复 7# swanseabrian
如果数字不连续,应当也能实现。思路:
在循环中使用call跳出循环外,然后使用goto语句找出下一个数字。
TOP
swanseabrian
发短消息
加为好友
swanseabrian
当前离线
UID61034 帖子237 精华0 积分312 PB312 技术0 捐助0 阅读权限20 在线时间202 小时 注册时间2013-5-31 最后登录2022-10-27
五级士官
帖子237 积分312 技术0 捐助0 注册时间2013-5-31
9楼
发表于 2021-12-4 16:09
| 只看该作者
回复 8# qixiaobin0715
应该不会有这么变态的需求了吧
TOP
qixiaobin0715
发短消息
加为好友
qixiaobin0715
当前离线
UID74702 帖子2877 精华0 积分4235 PB2909 技术442 捐助0 阅读权限90 在线时间5030 小时 注册时间2016-2-20 最后登录2024-12-31
大校
帖子2877 积分4235 技术442 捐助0 注册时间2016-2-20
10楼
发表于 2021-12-7 08:37
| 只看该作者
本帖最后由 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