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

[文件操作] [已解决]批处理如何删除文件名中的指定字符串?

本帖最后由 xinjinjie 于 2017-4-11 22:17 编辑

最近在处理视频的字幕文件,ASS格式和其他格式的字幕文件时发现一个可以通过批处理来优化处理速度的情况,但是不知道这种情况的批处理代码该怎么写,来求助大家,还请指点一下。

比如文件夹内的字幕文件带有“_tract3”或者“_tract4”的关键字,需要将这个关键字内容在改文件名时去掉。

例如:AAAA_tract3.ass,想要改名成AAAA.ass。AAAA的内容可能是不同的复数个内容,要怎么来写这个批处理代码呢?

L7,L8的代码貌似都可以对应该情况,我使用的代码简短点的

又不是没搜索,不知道该搜索什么关键字,搜索了“文件名修改”,“关键字删除”等自己想到的标题,找不到想要的答案才发帖的!

TOP

回复 3# dingcool


    虽然没用批处理代码来写过这种功能代码,不过大致能明白,这个代码似乎只是删除“String”这个内容的字符串内容,并没有完整的实现批处理当前文件夹中全部带有“String”内容的文件都重命名的效果吧?

TOP

回复 5# pcl_test


        @echo off&setlocal enabledelayedexpansion
    for /f "delims=" %%a in ('dir /a-d/b *_EN*') do (
        set "name=%%~na"
        for /f "tokens=1 delims=|" %%b in ("!name:_EN=|!") do echo;ren "%%a" "%%b%%~xa"
    )
    pause

这是版主大大在16年回复的另一个帖子里类似情况的处理代码,通过大大提供的搜索链接查到的,不过这个代码功能应该是“指定字符串及其后面的字符串”,我只需要删除指定字符串。

虽然不熟悉BAT代码,不过个人推断,前面三行代码应该不用改,第四行“for /f "tokens=1 delims=|" %%b in ("!name:_EN=|!") do echo;ren "%%a" "%%b%%~xa"”应该需要调整,还请版主大大指点。

TOP

回复 8# ShowCode


    这个代码也版主大大的代码很类似,有些疑问请教:

for /f "delims=" %%i in ('dir /a-d /b *.ass ^| find "tract"') ,这里似乎是在搜索文件,符合后缀名是.ass并且含有“tract”的字符串的才执行后面的代码吗?感觉好像没有限定后缀名的必要……

后面3行代码里,哪行是在处理去掉指定字符串“_tract3”或者“_tract4”的呢?

TOP

回复 7# taofan712


    感谢指点,确实有重名的可能性,只是一般这种情况在之前的处理中已经人工避免,但是有这种避免重名的判断是对的,可惜我没看懂代码……

TOP

回复 13# ShowCode

如果要搜索判断只要含有那个关键字的文件都符合条件的话,for /f "delims=" %%i in ('dir /a-d /b *.ass ^| find "tract"') 这里应该怎么改呢?是不是这样:for /f "delims=" %%i in ('dir /a-d /b *_tract3')?

    set "str=!str:~0,-11!",这句代码是怎么一个处理方法?还请指点一下具体方法,怎么实现的截取?

TOP

本帖最后由 pcl_test 于 2017-4-11 22:29 编辑

回复 15# ShowCode
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b *_tract3*) do (
  4.         set "str=%%i"
  5.         set "str=!str:~0,-11!"
  6.         ren "%%i" "!str!.ass"
  7.     )
复制代码
用这个代码测试,没有效果,是错在哪里呢?

找到错误在哪里了,下面的代码有效果了,虽然不太明白为什么要加单引号……
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /a-d /b *_tract3*') do (
  4.         set "str=%%i"
  5.         set "str=!str:~0,-11!"
  6.         ren "%%i" "!str!.ass"
  7.     )
复制代码

TOP

返回列表