根据文件名称将文件移动到文件夹中

根据文件名称将文件移动到文件夹中

我有几个需要移动的.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。

相关内容