使用批处理从文件名中删除特定字符串

时间:2016-03-01 09:11:16

标签: batch-file cmd

我需要你的帮助。

我有多个.txt files以下命名法:

test-test-test-201602291545.txt

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

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

201602291545.txt

201602291540.txt

请使用简单的批处理文件让我知道如何做到这一点。

1 个答案:

答案 0 :(得分:0)

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

重复的线条可能会得到改善。 "delims=-"可以(应该)在这里发出声音。我做了一些搜索,但没有找到任何东西。

警告:未经编辑的代码

dbenham

如果在所需的文件名开始后“test-”不能出现,则可能是类似下面的更好的方法。请注意,在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! ) ) 命令中删除ECHO之前,不会进行重复名称检测。

RENAME