【问题标题】:Remove specific string from file's name using batch使用批处理从文件名中删除特定字符串
【发布时间】:2017-09-04 11:25:41
【问题描述】:

我需要你的帮助。

我有多个.txt files,命名如下:

test-test-test-201602291545.txt

test-test-test-test-test-201602291540.txt

我想从文件名中删除“test”子字符串,最终结果应该是这样的:

201602291545.txt,

201602291540.txt

请告诉我如何使用简单的批处理文件来做到这一点。

【问题讨论】:

    标签: batch-file cmd


    【解决方案1】:

    基本问题是您需要某种方法将文件名开头的所有test- 字符串分开。下面的代码使用带有"delims=-"FOR 循环来执行此操作。

    重复的线条可能会得到改善。 dbenham 可以(应该)在这里插话。我做了一些搜索,但没有找到任何东西。

    警告:未经测试的代码

    SETLOCAL ENABLEDELAYEDEXPANSION
    
    SET "RESULT="
    
    FOR /F "usebackq tokens=*" %%a IN (`DIR /B /A:-D "test-*.txt"`) DO (
        SET "RESULT="
    
        FOR /F "tokens=1-30 delims=-" %%b IN ("%%~a") DO (
            IF /I "%%b" NEQ "" IF /I "%%b" NEQ "test" (SET "RESULT=%%b")
            IF /I "%%c" NEQ "" IF /I "%%c" NEQ "test" (SET "RESULT=%%c")
            IF /I "%%d" NEQ "" IF /I "%%d" NEQ "test" (SET "RESULT=%%d")
            IF /I "%%e" NEQ "" IF /I "%%e" NEQ "test" (SET "RESULT=%%e")
            IF /I "%%f" NEQ "" IF /I "%%f" NEQ "test" (SET "RESULT=%%f")
            IF /I "%%g" NEQ "" IF /I "%%g" NEQ "test" (SET "RESULT=%%g")
            IF /I "%%h" NEQ "" IF /I "%%h" NEQ "test" (SET "RESULT=%%h")
            IF /I "%%i" NEQ "" IF /I "%%i" NEQ "test" (SET "RESULT=%%i")
            IF /I "%%j" NEQ "" IF /I "%%j" NEQ "test" (SET "RESULT=%%j")
            IF /I "%%k" NEQ "" IF /I "%%k" NEQ "test" (SET "RESULT=%%k")
            IF /I "%%l" NEQ "" IF /I "%%l" NEQ "test" (SET "RESULT=%%l")
            IF /I "%%m" NEQ "" IF /I "%%m" NEQ "test" (SET "RESULT=%%m")
            IF /I "%%n" NEQ "" IF /I "%%n" NEQ "test" (SET "RESULT=%%n")
            IF /I "%%o" NEQ "" IF /I "%%o" NEQ "test" (SET "RESULT=%%o")
            IF /I "%%p" NEQ "" IF /I "%%p" NEQ "test" (SET "RESULT=%%p")
        )
    
        IF "!RESULT!" NEQ "" (
            ECHO RENAME "%%~a" !RESULT!
        )
    )
    

    如果“test-”在所需文件名开始后无法出现,则可能是以下更好的方法。请注意,在从 RENAME 命令中删除 ECHO 之前,不会进行重复名称检测。

    @ECHO OFF
    SETLOCAL ENABLEDELAYEDEXPANSION
    
    FOR /F "usebackq tokens=*" %%a IN (`DIR /B /A:-D "test-*.txt"`) DO (
        SET "V=%%a"
        SET "RESULT=!V:test-=!
    
        IF "!RESULT!" NEQ "" (
            IF EXIST "!RESULT!" (
                ECHO ERROR: Cannot rename %%a because !RESULT! already exists.
            ) ELSE (
                ECHO RENAME "%%~a" !RESULT!
            )
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2011-03-14
      • 1970-01-01
      • 2017-07-02
      • 2014-03-13
      • 2022-01-22
      相关资源
      最近更新 更多