基于文件名批量重命名和将文件移动到文件夹由于单个连字符而出错

时间:2018-02-08 17:50:57

标签: windows batch-file batch-rename

我有几个文件需要重命名,并根据文件名移动到各自的文件夹中。我的文件格式为:

village--rural--rodriguez.txt
city--rural--santa-ana.txt
city--urban--san-diego.txt
city--no-data--san-marino.txt

我希望最终输出为:

village(文件夹)包含rural(子文件夹),其中包含rodriguez.txt

city(文件夹)包含rural(子文件夹),其中包含santa-ana.txt

city(文件夹)包含urban(子文件夹),其中包含san-diego.txt

city(文件夹)包含no-data(子文件夹),其中包含san-marino.txt

我已阅读其他类似问题,并尝试使用适用于大多数文件的this code。唯一的问题是我的一些文件名中包含单个连字符-(如no-data中的city--no-data--san-marino.txt),这使得批处理文件忽略了对这些文件的处理:

@ECHO OFF
SETLOCAL
SET "sourcedir=c:\Users\Documents"
PUSHD %sourcedir%
FOR /f "tokens=1,2*delims=-" %%a IN (
 'dir /b /a-d *--*--*.*'
 ) DO if "%%c" neq "" if exist "%%a--%%b--%%c" (  
 MD "%%a" 2>nul
 MD "%%a\%%b" 2>nul
 ren  "%%a--%%b--%%c" "%%c"
 MOVE "%%c" ".\%%a\%%b\" >nul
)
POPD
GOTO :EOF

如何使批处理文件处理文件名,无论是否带有连字符?

1 个答案:

答案 0 :(得分:2)

如果你觉得它对你有用,你可以使用这个选项:

@Echo Off
SetLocal EnableDelayedExpansion
Set "SourceDir=%UserProfile%\Documents"
CD /D "%SourceDir%" 2>Nul || Exit /B
Set "i=0"
For %%A In (*--*--*.*) Do Call :Sub "%%A"
Exit /B

:Sub
Set "_=%~1"
Set "i=1"
Set "_!i!=%_:--="&Set /A i+=1&Set "_!i!=%"
If Not Exist "%_1%\%_2%\" MD "%_1%\%_2%"
Move /Y %1 "%_1%\%_2%\%_3%">Nul