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

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

有如下的文件:
格式是,前缀是一个固定的字符串(如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?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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

评分人数

bat小白,请多指教!谢谢!

TOP

  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

评分人数

TOP

回复 2# 77七


    可以,很给力

TOP

回复 3# idwma


    啊这,没想到,可以这样简单

TOP

回复 3# idwma


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

评分人数

TOP

方法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

评分人数

TOP

返回列表