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

[文件操作] [已解决]批处理如何将文件名中的序号用0补齐?

本帖最后由 autoav 于 2021-8-9 11:33 编辑

我用火车头采集了一些小说,导出成TXT,比如:斗罗大陆1.txt,斗罗大陆2.txt,斗罗大陆10.txt,斗罗大陆11.txt,我用【copy 斗罗大陆*.txt 斗罗大陆all.txt】合并的时候,是按照1,10,11合并的,而不是1,2,3合并的,这样章节就错乱了,所以我想对序号用0补齐,使之成为斗罗大陆001.txt,这样合并就不会错乱了。

和车模老妈的日常-71.txt
和车模老妈的日常-72.txt
和车模老妈的日常-73.txt
寄生-10.txt
寄生-11.txt
寄生-12.txt
寄生-13.txt
寄生-6.txt
寄生-7.txt
寄生-8.txt
寄生-9.txt
红尘仙道-100.txt
红尘仙道-93.txt
红尘仙道-94.txt
红尘仙道-95.txt
红尘仙道-96.txt
红尘仙道-97.txt
红尘仙道-98.txt
红尘仙道-99.txt
荒唐皇帝-90.txt
荒唐皇帝-91.txt
荒唐皇帝-92.txt
这是部分文件列表,我想通过以下批处理实现将不同章节的小说合并成单个txt文件。
copy 和车模老妈的日常*.txt 和车模老妈的日常.txt
copy 寄生*.txt 寄生.txt
copy 红尘仙道*.txt 红尘仙道.txt
copy 荒唐皇帝*.txt 荒唐皇帝.txt
这样就存在一个问题,因为序号没有用0补齐,寄生的10-13章会在6-9章前面,红尘仙道的100章会在93章前,我就想编一个批处理,用0补齐,最后结果的目录是这样的:
和车模老妈的日常-00071.txt
和车模老妈的日常-00072.txt
和车模老妈的日常-00073.txt
寄生-00006.txt
寄生-00007.txt
寄生-00008.txt
寄生-00009.txt
寄生-00010.txt
寄生-00011.txt
寄生-00012.txt
寄生-00013.txt
红尘仙道-00093.txt
红尘仙道-00094.txt
红尘仙道-00095.txt
红尘仙道-00096.txt
红尘仙道-00097.txt
红尘仙道-00098.txt
红尘仙道-00099.txt
红尘仙道-00100.txt
荒唐皇帝-00090.txt
荒唐皇帝-00091.txt
荒唐皇帝-00092.txt
这样我进行copy批处理的时候,就不会章节混乱了。

这个非常实用,我一直在找的。终于找到了。感谢各位。

TOP

已测试可行,放在要处理的文件夹中运行。建相应文件夹,copy一份改名再合并,便于测试。
gcbgczhang 发表于 2021-8-8 10:21



    经测试,可行,非常感谢!

TOP

回复  autoav
你说的不错。但是有一点,这么多不同类别的文件在一起,会增加处理难度。
可以考虑这样的思 ...
qixiaobin0715 发表于 2021-8-5 12:45



    经测试,已经成功,非常感谢!

TOP

本帖最后由 gcbgczhang 于 2021-8-8 10:40 编辑
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "tokens=1-31 delims=-" %%a in ('dir /b /a-d *-*.txt ') do (
  3. set str=%%a
  4. set str1=000000%%b
  5. set str1=!str1:~-10!
  6. if not exist --!str! md --!str!
  7. copy  %%a-%%b --!str!\!str!-!str1! >nul
  8. )
  9. for /d  %%i in (--*) do (
  10. copy  %%i\*-*.txt %%i\%%i.txt >nul
  11. )
  12. pause
复制代码
已测试可行,放在要处理的文件夹中运行。建相应文件夹,copy一份改名再合并,便于测试。

TOP

回复 33# autoav
再次检查代码,发现有一个循环语句中in和后面的括号未加空格,已修改。应当可以了。

TOP

本帖最后由 newswan 于 2021-8-8 10:29 编辑

回复 31# autoav


everything 以前没注意这个功能
谢谢

TOP

回复 33# autoav
像这种最好传一个示范附件作为测试用,否则不好检查到底代码有无问题。

TOP

回复  autoav
你说的不错。但是有一点,这么多不同类别的文件在一起,会增加处理难度。
可以考虑这样的思 ...
qixiaobin0715 发表于 2021-8-5 12:45


@echo off
setlocal enabledelayedexpansion
for /f "tokens=1* delims=-" %%i in ('dir /b /a-d *-*.txt') do (
    if not exist %%i md %%i
    move "%%i-%%j" "%%i"
)
你所有的代码中,这一段可以执行,后面一段代码没有执行

TOP

回复  autoav
你说的不错。但是有一点,这么多不同类别的文件在一起,会增加处理难度。
可以考虑这样的思 ...
qixiaobin0715 发表于 2021-8-5 12:45

里面的文件都是mysql数据库导出来的,具体格式是我输入的,就是书名-数据Id.txt,所以里面文件格式都是一样的

TOP

回复  autoav

请问
everything 正则改名 怎么处理0的个数问题?
newswan 发表于 2021-8-5 12:47

第一步:everything地址栏输入【K:\book regex:-\d.txt】 按F2,原表达式【^(.*?)-(\d+)\.txt$】新表达式【\1-0\2.txt】这样,原来AA-1.txt,就变成了AA-01.txt
第二步:everything地址栏输入【K:\book regex:-\d\d.txt】 按F2,原表达式【^(.*?)-(\d+)\.txt$】新表达式【\1-0\2.txt】这样,原来AA-11.txt,就变成了AA-011.txt
第三步:everything地址栏输入【K:\book regex:-\d\d\d.txt】 按F2,原表达式【^(.*?)-(\d+)\.txt$】新表达式【\1-0\2.txt】这样,原来AA-011.txt,就变成了AA-0011.txt
这个方法最大的优势是不挑文件夹,多深的目录都可以操作

TOP

回复 27# autoav

请问
everything 正则改名 怎么处理0的个数问题?

TOP

本帖最后由 qixiaobin0715 于 2021-8-7 10:03 编辑

回复 25# autoav
你说的不错。但是有一点,这么多不同类别的文件在一起,会增加处理难度。
可以考虑这样的思路:
1.假设全部是如楼主列出的比较规范的文件名;
2.将同一类型的文件移动到同一个文件夹;
3.然后在各个文件夹中分别对文件进行规范命名;
4.分别将各文件夹中的文件合并。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=-" %%i in ('dir /b /a-d *-*.txt') do (
  4.     if not exist %%i md %%i
  5.     move "%%i-%%j" "%%i"
  6. )
  7. for /d %%k in (*) do (
  8.     pushd "%%k"
  9.     for /f "tokens=1* delims=-" %%a in ('dir /b /a-d') do (
  10.         set str=0000%%b
  11.         set str=!str:~-9!
  12.         ren "%%a-%%b" "%%a-!str!"
  13.     )
  14.     copy "%%k-*" "%%~dpk%%k.txt"
  15.     popd
  16. )
  17. pause
复制代码
以上代码未经测试。

TOP

你用我上面的代码,把斗魂大陆都改成你相应的名,就都可以了,肯定会按大小排列

TOP

我发现最快捷的方法,就是用everything,直接用正则写,然后全部替换就可以了

TOP

返回列表