找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 12244|回复: 7

[文件操作] 求助批处理批量删除文件名末尾的数字

[复制链接]
发表于 2024-10-7 23:36:26 | 显示全部楼层 |阅读模式
求助!
我需要把一批忘记末尾数字后缀去除,数字不固定数量,浅学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
发表于 2024-10-8 07:20:49 | 显示全部楼层
回复 1# bingo122


    文件名里面固定有且只有一个 - 而且没有挨着待删除的数字吗?
发表于 2024-10-8 08:53:02 | 显示全部楼层
本帖最后由 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
复制代码
代码未经测试。
发表于 2024-10-8 10:37:49 | 显示全部楼层
回复 1# bingo122

删除文件名尾部数值字段可能会导致重名,如下
431242-测试菜市场 试测试2.txt》  431242-测试菜市场 试测试.txt
431242-测试菜市场 试测试66.txt》431242-测试菜市场 试测试.txt
楼主须给出对策...
 楼主| 发表于 2024-10-8 15:10:29 | 显示全部楼层
回复 2# Batcher


    只需要删除末尾数字,重名覆盖
发表于 2024-10-8 15:18:09 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-10-8 16:40:32 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-10-8 20:59:09 | 显示全部楼层
重名覆盖?真的没问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 18:19 , Processed in 0.018171 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表