【问题标题】:Using a Batch File to clean up a directory by date使用批处理文件按日期清理目录
【发布时间】:2012-02-20 22:59:57
【问题描述】:

我正在处理一个批处理文件来读取文件夹中的文件,如果它们超过 4 天,请将它们移动到 archive\YYYY\MM 文件夹结构中。这是当前的代码

::根据文件年月移动错误文件夹中的文件以存档

@echo 关闭

设置“源=C:\用户\用户\桌面\测试”
设置“targetRoot=C:\Users\user\Desktop\test\archive”
对于 /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') 做@(
    设置 mm=%%A
    设置 dd=%%B
    设置 yyyy=%%C
)
设置 currdate=%yyyy%%mm%%dd%
::echo %currdate%
设置 /a currdate-=7
::echo %currdate%
对于 ("%source%\*") 中的 %%F 执行 (
    for /f "tokens=1,2,3 delims=/ " %%D in ("%%~tF") 做 (
    SET 文件DT=%%F%%D%%E

    如果 /I %currdate% GTR %fileDT% (
        如果不存在 "%targetRoot%\%%F" mkdir "%targetRoot%\%%F"
        如果不存在 "%targetRoot%\%%F\%%D" mkdir "%targetRoot%\%%F\%%D"
        move "%%~fF" "%targetRoot%\%%F\%%D"
        )

    )
)

问题是我添加了之后

if /I %currdate% GTR %fileDT%
行,它不再知道 %%~fF 是什么,因此也不知道要移动哪个文件。

我应该注意我是批处理文件的新手,我主要修改我在网上找到的代码。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    问题出在这两行:

    for %%F in ("%source%\*") do (
        for /f "tokens=1,2,3 delims=/ " %%D in ("%%~tF") do (
    

    第一个 FOR 使用 %%F 可替换参数,但第二个 FOR 使用 %%D、%%E 和 %%F 参数(%%D 是显式的,%%E 和 %%F 是隐式的,因为 TOKENS =1,2,3),所以 %%F 的第一个含义丢失了。只需更改两个 FOR 参数之一,例如:

    for %%F in ("%source%\*") do (
        for /f "tokens=1,2,3 delims=/ " %%X in ("%%~tF") do (
        SET fileDT=%%Z%%X%%Y
    

    编辑:回答评论中所述的第二个问题。

    在这一行:

    if /I %currdate% GTR %fileDT%  (
    

    %currdate% 值对于 FOR 中的所有值都是常数,但 %fileDT% 随着 FOR 中的每个值而变化。为了使其工作,即获取在 FOR 或 IF 或括号内发生变化的变量的当前值,必须使用延迟变量扩展,即:

    if /I %currdate% GTR !fileDT!  (
    

    并且您必须在程序的开头包含此行:

    setlocal EnableDelayedExpansion
    

    【讨论】:

    • 您说得对,先生。我改变了参数,它工作。但是,fileDT var 在设置一次后不会更新。我在末尾添加了一个 SET fileDT= 来清除它,但它仍然以所有后续文件的第一个文件的日期运行。对此有什么想法吗?
    【解决方案2】:

    我认为 %%~fF 已经超出了范围,也许有某种方法可以使它成为全球性的还是什么?对不起,我对批处理文件处理很陌生所以我希望我不会误导你或其他什么,祝我好运,无论如何我都试过了......

    可能是在您的代码中,它增加该变量的部分根本没有被执行,或者没有输入新数据,因为在第一个循环之后,它一直跳过更改该值的指令......或根本没有击中它,检查你在哪里使用该部分,如果某些索引需要增加,确保它确实在循环内,并且确保每次都被击中,我希望这会有所帮助...... :)

    【讨论】:

      猜你喜欢
      • 2019-08-11
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多