从Reports文件夹的父文件夹运行此批处理文件:
for /f "delims=" %%a in ('dir /b /s "Reports folder\*.rep"') do for /f "tokens=2 delims=-" %%i in ("%%~a") do (
if not exist "%%~dpa%%i\" md "%%~dpa%%i"
move "%%~a" "%%~dpa%%i\"
)
%% a和%% i是两个for循环中使用的变量。前者包含.REP文件的完整路径(由外部循环提供),后者包含从文件名中提取的文件夹名称(由内部循环)。
for /?
是任何有兴趣的人真正应该寻求更多帮助的内容(请注意,在批处理文件中,%符号会加倍):
%~I - expands %I removing any surrounding quotes (")
%~dI - expands %I to a drive letter only
%~pI - expands %I to a path only
那么“ %%〜dpa %% i”是什么意思?假设由dir命令定位的.REP文件之一是"C:\Reports folder\123-Chemistry-101.rep"
。
%%〜dpa表示文件的驱动器号和路径减去周围的引号,即C:\Reports folder\
。
如上所述,%% i是从文件名中提取的文件夹名称(两个连字符定界符之间的任何内容),因此在这种情况下Chemistry
。
将所有内容放在一起,“ %%〜dpa %% i”会为此文件扩展为"C:\Reports folder\Chemistry"
,因为这是我们要将文件移动到的位置。