返回列表 发帖
powershell
$ToNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }
Get-ChildItem  -path 'X:\xx\a*.txt' | Sort-Object $ToNatural | ForEach-Object { get-content $_.fullname } | out-file a.txtCOPY

TOP

本帖最后由 gcbgczhang 于 2021-8-8 08:40 编辑

学习中,太麻烦,删掉了

TOP

回复 17# gcbgczhang


    文件夹里不要有其他TXT,因为用的*.txt,如果用斗魂大陆*.txt应该可以

TOP

回复 15# qixiaobin0715


    继续活学活用小小改动实现改名效果
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir/b *1.txt^|findstr "[^0-9]1.txt"') do (
    set "str=%%~ni"
    set "str=!str:~0,-1!"
    for %%a in ("!str!*.txt") do set /a n+=1
    (for /l %%b in (1,1,!n!) do set/a nn=10000+%%b &ren !str!%%b.txt !str!!nn:~1!.txt)
    set n=
)
pauseCOPY

TOP

本帖最后由 newswan 于 2021-8-3 01:04 编辑
$sour = "aaa"
$ToNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }
Get-ChildItem -path $sour -Filter "*.txt" |
    Sort-Object $ToNatural |
    ForEach-Object {
        get-content -Encoding utf8 $_.fullname |
            Out-File -Append (( $_.basename -replace  "\d+$","" ) + ".txt")
}COPY

TOP

软件法:
ReNamer添加正则替换规则,并且保存预设,以后直接导入
第一条:
第([0-9]+)
替换
第000$1
...
xp3000 发表于 2021-8-2 12:51

我最后是用total command+emeditor搞定的,当然,只用total command也可以,只是它的正则不太容易写,所以我用emeditor先改好文件名,然后一次修改

TOP

本帖最后由 autoav 于 2021-8-4 10:23 编辑
补到10,应该够用了
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b /a- ...
gcbgczhang 发表于 2021-8-2 16:21



和车模老妈的日常-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
这样我进行批处理的时候,就不会章节混乱了。

TOP

本帖最后由 newswan 于 2021-8-4 14:21 编辑

powershell
$sour = "."
Get-ChildItem -path $sour -Filter "*-*.txt" | ForEach-Object {
    if ($_.basename -match "(.*)-(\d+)$")
    {
       write-host $_.basename ($matches[1] + "-" + $matches[2].PadLeft(6,"0"))
#       rename-item -path $_.FullName -NewName ($matches[1] + "-" + $matches[2].PadLeft(6,"0") + $_.Extension)
     }
   }COPY
先测试,正确的话,把地6行的#去掉

TOP

这么多文件,应该按小说名分目录
寄生\12.txt
寄生\13.txt
寄生\6.txt
寄生\7.txt
红尘仙道\100.txt
红尘仙道\93.txt
红尘仙道\94.txt
红尘仙道\95.txtCOPY
后续处理方便

TOP

这么多文件,应该按小说名分目录后续处理方便
newswan 发表于 2021-8-4 14:25



    多层子目录,才不方便,同样文件数目情况下,肯定一个目录更方便。

TOP

powershell先测试,正确的话,把地6行的#去掉
newswan 发表于 2021-8-4 14:20



    powershell不了解

TOP

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

TOP

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

TOP

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

回复 25# autoav
你说的不错。但是有一点,这么多不同类别的文件在一起,会增加处理难度。
可以考虑这样的思路:
1.假设全部是如楼主列出的比较规范的文件名;
2.将同一类型的文件移动到同一个文件夹;
3.然后在各个文件夹中分别对文件进行规范命名;
4.分别将各文件夹中的文件合并。
@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"
)
for /d %%k in (*) do (
    pushd "%%k"
    for /f "tokens=1* delims=-" %%a in ('dir /b /a-d') do (
        set str=0000%%b
        set str=!str:~-9!
        ren "%%a-%%b" "%%a-!str!"
    )
    copy "%%k-*" "%%~dpk%%k.txt"
    popd
)
pauseCOPY
以上代码未经测试。

TOP

回复 27# autoav

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

TOP

返回列表