我有几个需要移动的.pdf 和 .jpg 文件。
它们的名字是这样的
002-054*.pdf
042-021*.pdf
* 是某些词缀。
现在我想将这些文件移动到这样的文件夹中
002\002 - 054\002-054*.pdf
042\042 - 021\042-021*.pdf
一些文件夹已经存在,但采用这种命名方案002\002 - 054 Some Name\
我只想在文件夹不存在时创建第二个代码片段中所述的文件夹。如果它们已经存在,我只想将文件移动到相应的文件夹中。
通过谷歌搜索,我找到了一些东西
@echo off
for %%F in (*.pdf *.jpg) do call :subr "%%F"
exit /b
:subr
set filename=%1
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b
但这不考虑已经存在的文件夹。实现此目的的最佳方法是什么?
答案1
您只需要在子程序中添加几行:-
:subr
set filename=%1
Rem Check for existence of directories in target path
if not exist %filename:~1,3% md %filename:~1,3%
if not exist %filename:~1,3%\%filename:~1,7% md %filename:~1,3%\%filename:~1,7%
Rem Now the move can proceed
move %1 %filename:~1,3%\%filename:~1,7%\
exit /b
如果存在与您需要创建的目录路径之一同名的现有文件,此操作将失败。您需要决定如何处理这种情况,例如在名称中添加扩展名或将文件移至其他位置。
答案2
假设该文件夹必须在当前目录中创建
,并且第二级文件夹包含-
以下数字:
@echo off
for /f "delims=" %%F in (
'Dir /b *.pdf *.jpg^|findstr "^[0-9][0-9][0-9]-[0-9][0-9][0-9]" '
) do call :subr "%%F"
exit /b
:subr
set "file=%~n1"
set "fold=%file:~0,3%\%file:~0,3% - %file:~4,3%\"
if not exist "%fold%" md "%fold%"
move %1 "%fold%"
和 的更改dir |findstr
是为了确保只处理以数字模式 999-999 开头的文件。
由于 md 创建了中间文件夹,因此只需要一个 md。