【发布时间】:2015-12-28 23:52:34
【问题描述】:
我正在尝试将T: 驱动器上的所有文件(和目录)组织到两个目录中:Pre2010 和PostAnd2010。文件应根据上次修改时间进行组织——因此,如果文件T:\dirA\fileA1 的时间戳为12/28/2015 03:42pm,则应将其移动到T:\PostAnd2010\dirA\,并保持相同的文件名。此外,如果文件T:\dirA\fileA2 具有时间戳1/13/2009 12:23am,则应将其移动到具有相同文件名的T:\Pre2010\dirA\。所以新的Pre2010 和PostAnd2010 目录应该保持与之前的T: 驱动器相同的目录结构,但按日期拆分文件。
我真的没有任何编写批处理文件的经验,但我一直在努力!到目前为止,这是我的代码:
@ECHO OFF
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
chdir /d T:
FOR /r %%i IN (*) do (
FOR %%a in (%%i) do set FileDate=%%~ta
set year=!FileDate:~6,4!
if !year! LSS 2010 (
REM Move to T:\Pre2010\<filepath>
echo !year! is before 2010
) else (
REM Move to T:\PostAnd2010\<filepath>
echo !year! is 2010 or after
)
REM echo !year!
pause
)
echo Done.
pause
这似乎工作正常,但后来我注意到年份有时会打印为 ~6,4 而不是实际年份。我检查了导致问题的文件的时间戳,但它们似乎没有什么奇怪的。我不确定为什么 FileDate 和 year 在某些文件上是空白的。在完成移动文件部分之前,我想弄清楚这个问题。
任何帮助将不胜感激!谢谢!
【问题讨论】:
-
尝试将
/a开关用于一年的set。 -
@ClaytonWahlstrom 这似乎只是将输出的“~6,4”更改为“-7”。
-
你做了
set /a year=!FileDate:~6,4!吗? -
首先将
FOR %%a in (%%i) do set FileDate=%%~ta换成set FileDate=%%~ti;然后删除@echo off并尝试捕获FileDate为空的项目... -
@aschipfl 谢谢这似乎有效!我从其他地方得到那条线,我不确定他们为什么使用循环......有人也可以帮助复制部分吗?我认为
xcopy是一个不错的选择,但我似乎无法让变量路径正常工作。我试着做set filepath=!i:~2,999!然后xcopy "!filepath!" "T:\Pre2010\!filepath!",但我的文件路径变量有问题。我只需要从当前文件的路径中删除第一个字符T:。
标签: windows batch-file windows-7 scripting