我有一个重复发生的工作,要求我提交所有结构化名称的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
我已经看到了基于文件名创建文件夹的类似问题,但没有具备这种特殊需求。
答案 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\"
)