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

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

求助!
我需要把一批忘记末尾数字后缀去除,数字不固定数量,浅学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

回复 1# bingo122


    文件名里面固定有且只有一个 - 而且没有挨着待删除的数字吗?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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
复制代码
代码未经测试。

TOP

回复 1# bingo122

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

TOP

回复 2# Batcher


    只需要删除末尾数字,重名覆盖

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

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

TOP

返回列表