Board logo

标题: [文件操作] 求助批处理批量删除文件名末尾的数字 [打印本页]

作者: bingo122    时间: 2024-10-7 23:36     标题: 求助批处理批量删除文件名末尾的数字

求助!
我需要把一批忘记末尾数字后缀去除,数字不固定数量,浅学bat,没找到对应正则,求助各位吴彦祖,万分感谢!!!
例:
4312412-测试菜市场 测试测试312.txt
4312-测试菜市场 测测试31.txt
431242-测试菜市场 试测试2.txt
431242-测试菜市场 试测试66.txt
4312-测试菜市场 测试试3212.txt

输出结果需求:
4312412-测试菜市场 测试测试.txt
4312-测试菜市场 测测试.txt
431242-测试菜市场 试测试.txt
431242-测试菜市场 试测试.txt
4312-测试菜市场 测试试.txt
作者: Batcher    时间: 2024-10-8 07:20

回复 1# bingo122


    文件名里面固定有且只有一个 - 而且没有挨着待删除的数字吗?
作者: qixiaobin0715    时间: 2024-10-8 08:53

本帖最后由 qixiaobin0715 于 2024-10-8 09:09 编辑

如果末尾数字不超过4位数,这样勉强可行:
  1. @echo off
  2. for /l %%i in (9999,-1,0) do (
  3.     if exist *%%i.txt (
  4.         for /f "delims=" %%j in ('dir /b /a-d *%%i.txt') do (
  5.             set "str=%%j"
  6.             setlocal enabledelayedexpansion
  7.             set "str=!str:%%i.txt=.txt!"
  8.             ren "%%j" "!str!"
  9.             endlocal
  10.         )
  11.     )
  12. )
  13. pause
复制代码
代码未经测试。
作者: aloha20200628    时间: 2024-10-8 10:37

回复 1# bingo122

删除文件名尾部数值字段可能会导致重名,如下
431242-测试菜市场 试测试2.txt》  431242-测试菜市场 试测试.txt
431242-测试菜市场 试测试66.txt》431242-测试菜市场 试测试.txt
楼主须给出对策...

作者: bingo122    时间: 2024-10-8 15:10

回复 2# Batcher


    只需要删除末尾数字,重名覆盖
作者: hfxiang    时间: 2024-10-8 15:18

本帖最后由 hfxiang 于 2024-10-8 15:19 编辑

回复 1# bingo122

针对楼主给定的数据样本,在命令行方式下,进入对应文件夹,用第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的如下指令可实现:
  1. dir *.txt/b|gawk "{o=$0;sub(/[0-9]+\.txt$/,\".txt\");if(o!=$0){print \"mobve \042\"o\"\042 \042\"$0\"\042\"}}"|cmd.exe
复制代码

作者: aloha20200628    时间: 2024-10-8 16:40

本帖最后由 aloha20200628 于 2024-10-8 18:02 编辑

回复 5# bingo122
  1. @echo off &setlocal &for /f "delims=" %%F in ('dir /b/a-d *.txt') do (
  2.    set "F=%%F" &set "nF=%%~nF" &set "xF=%%~xF"
  3.    (call :cut#n)
  4. )
  5. endlocal&pause&exit/b
  6. :cut#n // 删除文件名尾部的数值字段,重名予以覆盖
  7.   setlocal enabledelayedexpansion
  8.   :#n
  9.   if not defined nF (endlocal&exit/b) else (
  10.      if !nF:~-1! geq 0 if !nF:~-1! leq 9 (set "nF=!nF:~,-1!" &goto :#n)
  11.      move /y "!F!" "!nF!!xF!"
  12.      endlocal&exit/b
  13.   ) 2>nul
复制代码

作者: Five66    时间: 2024-10-8 20:59

重名覆盖?真的没问题吗?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2