我有几个文件需要重命名,并根据文件名移动到各自的文件夹中。我的文件格式为:
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
如何使批处理文件处理文件名,无论是否带有连字符?
答案 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