由于单个连字符,基于文件名的批量重命名和移动文件到文件夹有错误
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
我有几个文件要重命名并根据文件名移动到各自的文件夹中。我的文件格式为:
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