由于单个连字符,基于文件名的批量重命名和移动文件到文件夹有错误

Batch rename and move files to folders based on filename has error due to single hyphen

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

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

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

@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

我怎样才能使批处理文件处理文件名,无论是否带有连字符?

如果您认为它更适合您,您可以使用此选项:

@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