【问题标题】:Using the Windows command line, remove unwanted prefixes使用 Windows 命令行,删除不需要的前缀
【发布时间】:2014-01-05 23:30:50
【问题描述】:

我有许多文件需要在没有当前前缀的情况下重命名。不幸的是没有严格的格式

01 - MYFILE.txt
02 - MYFILE - Maybe with extra hypen.mp3
333 - MYFILE.bin

这些应该重命名为:

MYFILE.txt
MYFILE - Maybe with extra hypen.mp3
MYFILE.bin

基本上我想删除类 [0-9-] 中的任何字符,即任何连字符、数字、空格,直到找到一个不在该类中的字符。

我需要使用批处理文件来完成这项工作

【问题讨论】:

    标签: batch-file for-loop command findstr


    【解决方案1】:
    @ECHO OFF
    SETLOCAL
    SET sourcedir=u:\test
    FOR %%o IN ("%sourcedir%\*") DO (
     FOR /f "tokens=*delims=0123456789- " %%a IN ("%%~nxo") DO (
      ECHO REN "%%o" "%%a"
      IF /i NOT "%%~nxo"=="%%a" ECHO gated REN "%%o" "%%a"
     )
    )
    GOTO :EOF
    

    所需的命令只是ECHOed 用于测试目的。验证命令正确后,将ECHO REN 更改为REN 以实际重命名文件。

    示例源目录列表:

     Directory of u:\test
    
    06/01/2014  08:36                 0 01 - myfile.txt
    06/01/2014  08:37                 0 02 - myfile - maybe with extra hypen.mp3
    06/01/2014  08:38                 0 333 - myfile.bin
    06/01/2014  08:38                 0 leave me alone - I am not to change.atall
    

    结果:

    REN "u:\test\01 - myfile.txt" "myfile.txt"
    REN "u:\test\02 - myfile - maybe with extra hypen.mp3" "myfile - maybe with extra hypen.mp3"
    REN "u:\test\333 - myfile.bin" "myfile.bin"
    REN "u:\test\leave me alone - I am not to change.atall" "leave me alone - I am not to change.atall"
    

    编辑 - 新的 gated 重命名行回显以绕过重命名为相同名称的尝试。

    【讨论】:

    • 不太习惯各种for命令,没想到嵌套for循环。不错!
    【解决方案2】:

    使用 DOS 的 for/f 命令并不难。

    假设您有一个名为 test.txt 的文件:

    01 - MYFILE.txt
    02 - MYFILE - Maybe with extra hypen.mp3
    333 - MYFILE.bin
    

    这是一个可能有用的批处理文件。在我的例子中命名为 test.bat:

    FOR /F "tokens=1,2* delims=0123456789- " %%i in (test.txt) do @echo %%i %%j %%k
    set /p DUMMY=Hit ENTER to continue...
    

    下面是 cmd 窗口中的结果:

    C:\Users\Ron Fredericks\Desktop>FOR /F "tokens=1,2* delims=0123456789- " %i in (
    test.txt) do @echo %i %j %k
    MYFILE.txt
    MYFILE Maybe with extra hypen.mp3
    MYFILE.bin
    
    C:\Users\Ron Fredericks\Desktop>set /p DUMMY=Hit ENTER to continue...
    Hit ENTER to continue...
    

    【讨论】:

    • 与其依赖可能会过时的文本文件 - 为什么不将你的 for 循环更改为 - FOR /F "tokens=1,2* delims=0123456789- " %%i in ('dir /B directory\to\check') do @echo %%i %%j %%k
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2011-01-29
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多