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

[文件操作] 【已解决】批处理怎样更简单的删除文件名的前缀和后缀?

[复制链接]
发表于 2023-8-18 19:56:44 | 显示全部楼层 |阅读模式
有如下的文件:
格式是,前缀是一个固定的字符串(如Muc_),中间节长度和内容不固定,后缀是乱码但长度固定(如_b00)。
  1. Muc_阿强_1_b00
  2. Muc_阿强_1_a_a08
  3. Muc_阿强_5_b_0s0
  4. ……
  5. Muc_阿珍_a_0a9
  6. Muc_阿明_g_s_5_0ac
  7. Muc_阿羽_9_0j5
复制代码
希望把文件名修改成如下:
  1. 阿强_1
  2. 阿强_1_a
  3. 阿强_5_b
  4. ……
  5. 阿珍_a
  6. 阿明_g_s_5
  7. 阿羽_9
复制代码
我的水平只能想出先把先弄到文本里,再通过文件修改
  1. @echo off&chcp 65001
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.) do (
  4. set a=%%a
  5. echo !a! !a:~-4!>>1.txt
  6. )
  7. for /f "tokens=1,2" %%i in (1.txt) do (
  8. set b=%%i
  9. set b1=!b:%%j=!
  10. set a1=!b1:Muc_=!
  11. ren %%i !a1!
  12. )
  13. del 1.txt
  14. pause
复制代码
有没有大佬可以给个更简洁的bat?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-8-18 20:49:07 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=1* delims=_" %%a in ('dir /b /a-d ^|find "_" ^|find /v "%~nx0"') do (
  3.         for %%e in ("%%b") do (
  4.                 set str1=%%~ne
  5.                 set str2=%%~xe
  6.                 set str3=%%a_%%b
  7.                 setlocal enabledelayedexpansion
  8.                 ren "!str3!" "!str1:~0,-4!!str2!"
  9.                 endlocal
  10.         )
  11. )
  12. pause
复制代码

这样行吗

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 乐于助人

查看全部评分

发表于 2023-8-18 20:52:37 | 显示全部楼层
  1. @echo off&chcp 65001
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.) do (
  4. set a=%%a
  5. ren !a! !a:~4,-4!
  6. )
  7. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-8-18 21:04:01 | 显示全部楼层
回复 2# 77七


    可以,很给力
 楼主| 发表于 2023-8-18 21:16:43 | 显示全部楼层
回复 3# idwma


    啊这,没想到,可以这样简单
发表于 2023-8-18 22:34:32 | 显示全部楼层
回复 3# idwma


    文件名末尾的.似乎比较特殊,dir *. 输出的是没有扩展名的文件和没有.的文件夹,而dir *.. 也一样。

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 乐于助人

查看全部评分

发表于 2023-8-18 23:00:41 | 显示全部楼层
方法1
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,*delims=_" %%1 in (1.txt)do (
  3.         set col=0
  4.         set old_name=%%1_%%2
  5.         set str=%%2#
  6.         for /l %%3 in (1,1,20)do (
  7.                 call set mid=%%str:~%%3,1%%
  8.                 set /a col+=1
  9.                 if !mid!==_ (
  10.                         set /a b=!col!                       
  11.                 )
  12.         )
  13.         call set new_name=%%str:~,!b!%%
  14.         ren !old_name! !new_name!
  15. )
复制代码
方法2
  1. @echo off&powershell -nologo -executionpolicy bypass "gc 1.txt|%%{ren $_ ([regex]::Matches($_,'(?<=.+_).+(?=_.+)').value) -ErrorAction Ignore}"
复制代码

评分

参与人数 1技术 +1 收起 理由
svh009 + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 15:34 , Processed in 0.022201 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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