Batch file 批处理文件根据日期移动PDF文件,必要时创建文件夹

Batch file 批处理文件根据日期移动PDF文件,必要时创建文件夹,batch-file,Batch File,我是批处理文件的新手。我可以做一些非常简单的事情,但是下一个问题让我很困惑 我们有一个为客户生成PDF报价的程序,该程序以以下方式保存 firstname lastname\u估计值\u MMDDYYYY-### 例如,如果我有一个客户“John Doe”,我们在今年的圣诞夜给他一个估计值(在我们的系统中是第239位),结果会是这样的 约翰杜估计值12242013-239.pdf 现在它位于文件夹“C:\Estimates”中。我想让批处理文件做的是查看“C:\Estimates”文件夹中的所有

我是批处理文件的新手。我可以做一些非常简单的事情,但是下一个问题让我很困惑

我们有一个为客户生成PDF报价的程序,该程序以以下方式保存

firstname lastname\u估计值\u MMDDYYYY-###

例如,如果我有一个客户“John Doe”,我们在今年的圣诞夜给他一个估计值(在我们的系统中是第239位),结果会是这样的

约翰杜估计值12242013-239.pdf

现在它位于文件夹“C:\Estimates”中。我想让批处理文件做的是查看“C:\Estimates”文件夹中的所有文件,并自动移动按年份排序的文件。因此,所有2012年的估计数都被放入“C:\estimates\2012”文件夹中,2013年放入“C:\estimates\2013”文件夹中


这里的一些批处理文件让我接近,但没有雪茄。任何帮助都会很好。谢谢

C:\Estimates
文件夹中启动此功能。文件名不应在客户端名称中包含
\uuu
-

@echo off
setlocal disabledelayedexpansion
for %%a in (*.pdf) do (
   for /f "tokens=3 delims=_-" %%b in ("%%a") do (
    set variable=%%b
       setlocal enabledelayedexpansion
         set variable=!variable:~-4!
         md !variable! 2>nul
         move "*!variable!-*.pdf" !variable! >nul
       endlocal
  )
)

请包括代码-使您接近的现有批处理文件的部分,以及它们的不足之处。一般来说,将工作分解为小块,编写代码以正确执行单个块,然后组合各个部分。另外:它必须是批处理文件吗?与其他脚本语言(如python或ruby)相比,批处理文件通常既不健壮,也不容易用于复杂程度不高的任何事情。如果存在
,那么这里的
的目的是什么?
的外部
不会返回不存在的条目,那么为什么要测试它们的存在性呢?我想延迟扩展是正确的。我认为需要
if exist
,因为
for/f
在开始之前收集所有文件名,在循环中,
move
命令删除的不仅仅是
%%a
中的文件名,因此在
%%a
中找不到后续的文件名。如果
文件不存在时,移动
使内部循环也被省略,您认为这更有意义吗?在我看来,它应该是好的,这可能会给你一个小小的性能提升。另一方面,
endlocal
不需要参数(它只是
endlocal
),但最好在脚本的开头放一个
setlocal disabledelayedexpansion
,以确保
不会被不必要地消耗。@AndriyM既然你提到了它,
的外部
是将单个文件传递给
for/f
的循环,因此不需要
if exist
。我不确定,但这里不会痛,所以我把它放在里面。