标题: [文件操作] 【已解决】批处理怎样更简单的删除文件名的前缀和后缀? [打印本页]
作者: svh009 时间: 2023-8-18 19:56 标题: 【已解决】批处理怎样更简单的删除文件名的前缀和后缀?
有如下的文件:
格式是,前缀是一个固定的字符串(如Muc_),中间节长度和内容不固定,后缀是乱码但长度固定(如_b00)。- Muc_阿强_1_b00
- Muc_阿强_1_a_a08
- Muc_阿强_5_b_0s0
- ……
- Muc_阿珍_a_0a9
- Muc_阿明_g_s_5_0ac
- Muc_阿羽_9_0j5
复制代码
希望把文件名修改成如下:- 阿强_1
- 阿强_1_a
- 阿强_5_b
- ……
- 阿珍_a
- 阿明_g_s_5
- 阿羽_9
复制代码
我的水平只能想出先把先弄到文本里,再通过文件修改- @echo off&chcp 65001
- setlocal enabledelayedexpansion
- for %%a in (*.) do (
- set a=%%a
- echo !a! !a:~-4!>>1.txt
- )
- for /f "tokens=1,2" %%i in (1.txt) do (
- set b=%%i
- set b1=!b:%%j=!
- set a1=!b1:Muc_=!
- ren %%i !a1!
- )
- del 1.txt
- pause
复制代码
有没有大佬可以给个更简洁的bat?
作者: 77七 时间: 2023-8-18 20:49
- @echo off
- for /f "tokens=1* delims=_" %%a in ('dir /b /a-d ^|find "_" ^|find /v "%~nx0"') do (
- for %%e in ("%%b") do (
- set str1=%%~ne
- set str2=%%~xe
- set str3=%%a_%%b
- setlocal enabledelayedexpansion
- ren "!str3!" "!str1:~0,-4!!str2!"
- endlocal
- )
- )
- pause
复制代码
这样行吗
作者: idwma 时间: 2023-8-18 20:52
- @echo off&chcp 65001
- setlocal enabledelayedexpansion
- for %%a in (*.) do (
- set a=%%a
- ren !a! !a:~4,-4!
- )
- pause
复制代码
作者: svh009 时间: 2023-8-18 21:04
回复 2# 77七
可以,很给力
作者: svh009 时间: 2023-8-18 21:16
回复 3# idwma
啊这,没想到,可以这样简单
作者: buyiyang 时间: 2023-8-18 22:34
回复 3# idwma
文件名末尾的.似乎比较特殊,dir *. 输出的是没有扩展名的文件和没有.的文件夹,而dir *.. 也一样。
作者: Nsqs 时间: 2023-8-18 23:00
方法1- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,*delims=_" %%1 in (1.txt)do (
- set col=0
- set old_name=%%1_%%2
- set str=%%2#
- for /l %%3 in (1,1,20)do (
- call set mid=%%str:~%%3,1%%
- set /a col+=1
- if !mid!==_ (
- set /a b=!col!
- )
- )
- call set new_name=%%str:~,!b!%%
- ren !old_name! !new_name!
- )
复制代码
方法2- @echo off&powershell -nologo -executionpolicy bypass "gc 1.txt|%%{ren $_ ([regex]::Matches($_,'(?<=.+_).+(?=_.+)').value) -ErrorAction Ignore}"
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |