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

[文件操作] [已解决]批处理修改文件名删除特定两个字符之间字符

本帖最后由 Alandx 于 2021-4-14 10:59 编辑

删除第一个_与倒数第二个_之间的字符,最好将最后一个_后的字符也删除。
例:
abc_xyz_a-a_654321_01_123.jpg
删除后得:
abc_01_123.jpg
最好:
abc_01.jpg

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b *.jpg') do (
    set $=%%a
    echo !$!
    for /f "tokens=1,5* delims=_" %%i in ('dir /b !$!') do (
        echo %%i %%j %%k
        pause
        ren "!$!" "%%i_%%j_%%k"
    )
)
endlocal
pause

TOP

"_" 数量是固定的吗?

TOP

本帖最后由 qixiaobin0715 于 2021-4-11 06:50 编辑

回复 3# newswan
_数量不固定可以这样。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.jpg) do (
  4.     set n=1
  5.     set str=%%a
  6.     set str=!str:_= !
  7.     for %%b in (!str!) do (
  8.         if !n!==1 (
  9.             set str1=%%b&set n=0
  10.         ) else if "%%b"=="%%~nb" (
  11.             set str2=%%b
  12.         )
  13.     )
  14. ren "%%a" "!str1!_!str2!.jpg"
  15. )
  16. pause
复制代码

TOP

本帖最后由 newswan 于 2021-4-11 23:09 编辑

固定段落数量
  1. for /f "usebackq tokens=1,5,7 delims=_." %%i in (`dir /b *.jpg`) do (
  2.     echo %%i %%j %%k
  3. )
复制代码

TOP

本帖最后由 newswan 于 2021-4-12 00:31 编辑

段落数量可变,有 awk 方便多了,用shift 遍历参数麻烦些。
  1. dir /b *.jpg | awk -F '[_.]' '{print $1"_"$(NF-2)}'
复制代码

TOP

回复 6# newswan

你的代码有问题,正确的应该如下:

dir /b *.jpg |awk -F '[_.]' '{print $1"_"$(NF-2)"."$(NF)}'

TOP

回复 7# netdzb


忘记 扩展名了。。

TOP

回复 6# newswan

我是新手 问一下awk是什么?

TOP

什么sed、awk之类的都属于第三方命令,需要下载所属代码,处理字符串较为方便,个人偏爱纯批,不受限制。

TOP

回复 9# Alandx


sed和awk(gawk)是Linux系统里面两个非常强大的文本处理命令
Windows能用的版本可以在这里下载:
http://bcn.bathome.net/s/tool/index.html?key=sed
http://bcn.bathome.net/s/tool/index.html?key=gawk
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

也可以这样:
通过set /a m-=?,来控制文件名是要保留倒数第几段字符。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.jpg) do (
  4.     set n=0
  5.     set str=%%a
  6.     set str=!str:_= !
  7.     for %%b in (!str!) do (
  8.         set /a n+=1
  9.         set /a m=!n!%%10
  10.         set str!m!=%%b
  11.     )
  12.     set /a m-=1
  13.     for %%c in (str!m!) do ren "%%a" "!str1!_!%%c!.jpg"
  14. )
  15. pause
复制代码

TOP

本帖最后由 newswan 于 2021-4-13 00:55 编辑

回复 12# qixiaobin0715

每个字段分别保存到一个变量,通过for语句进行2次变量扩展。
  1. for %%a in (*.jpg) do (
  2.     set str=%%~na
  3.     set str=!str:_= !
  4.     set n=0
  5.     for %%a in (!str!) do (
  6.         set /a n+=1
  7.         set str!n!=%%a
  8.     )
  9.     set /a m=n-1
  10.     set str
  11.     for %%a in (str!m!) do echo !%%a!
  12. )
复制代码

TOP

回复 13# newswan

画蛇添足是我经常出现的问题,谢谢提醒。应修改为:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.jpg) do (
  4.     set n=0
  5.     set str=%%a
  6.     set str=!str:_= !
  7.     for %%b in (!str!) do (
  8.         set /a n+=1
  9.         set str!n!=%%b
  10.     )
  11.     set /a n-=1
  12.     for %%c in (str!n!) do ren "%%a" "!str1!_!%%c!.jpg"
  13. )
  14. pause
复制代码

TOP

回复 11# Batcher

感谢~~

TOP

返回列表