可以从1个PDF标题创建文件夹和子文件夹并将其移动到子文件夹的批处理文件

时间:2017-04-20 20:06:26

标签: windows batch-file cmd

我有一个重复发生的工作,要求我提交所有结构化名称的PDF文件" RMAfile PO#000001 SN#000002.pdf"我需要的是一种基于SN#和基于PO#的子文件夹创建文件夹的方法,然后将文件移动到子文件夹中。

示例...

C:\...\Desktop\RMAfile PO#000001 SN#000002.pdf
Run Batch file
C:\...\Desktop\000002\000001\RMAfile PO#000001 SN#000002.pdf

我已经看到了基于文件名创建文件夹的类似问题,但没有具备这种特殊需求。

2 个答案:

答案 0 :(得分:0)

通过使用for命令,您可以执行此操作。见下文。

@echo off

pushd C:\...\Desktop

for /f "delims=# tokens=2,3" %%i in ('dir /b *.pdf') do (
   for /f "tokens=1" %%k in ('echo^(%%i') do set "po=%%k"
   set "sn=%%~nj"
   setlocal enabledelayedexpansion
   mkdir "!sn!\!po!" >nul
   move "RMAfile PO#!po! SN#!sn!.pdf" "!sn!\!po!" >nul
   endlocal
)

popd

答案 1 :(得分:0)

这个怎么样:

for /F "tokens=1-5 delims=# " %%A in ('
    dir /B "%USERPROFILE%\Desktop\* PO#?????? SN#??????.pdf" ^| ^
    findstr /I /R /C:"[^# ][^# ]* PO#[0-9][0-9][0-9][0-9][0-9][0-9] SN#[0-9][0-9][0-9][0-9][0-9][0-9].pdf"
') do (
    mkdir "%USERPROFILE%\Desktop\%%~nE\%%C"
    move "%USERPROFILE%\Desktop\%%A %%B#%%C %%D#%%E" "%USERPROFILE%\Desktop\%%~nE\%%C\"
)

findstr部分只是过滤文件以避免错误移动。如果只有文件与所描述的模式相匹配,则可以将代码缩减为:

for /F "tokens=1-5 delims=# " %%A in ('
    dir /B "%USERPROFILE%\Desktop\* PO#?????? SN#??????.pdf"
') do (
    mkdir "%USERPROFILE%\Desktop\%%~nE\%%C"
    move "%USERPROFILE%\Desktop\%%A %%B#%%C %%D#%%E" "%USERPROFILE%\Desktop\%%~nE\%%C\"
)