基本的問題是,你需要某種方法從文件名的開頭分割出所有的test-
字符串。下面的代碼使用FOR
循環與"delims=-"
來做到這一點。
重複行可能可以改善。 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!
)
)
如果「測試 - 」所需的文件名開頭的大概就像下面的一個更好的辦法後,不能出現。請注意,從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!
)
)
)
來源
2016-03-01 12:46:54
lit