如何对文件夹进行排序并仅移动特定文件?

时间:2015-07-16 02:23:37

标签: batch-file

我在文件夹中有大量的.zip文件,如果它在名称中满足某个条件,我想移动到我创建的新文件夹中。比如,如果它在文件名中有日期,我想将其移动到文件夹中。         cd C:\ Users \ eyousea \ Documents \ Test

    set today=%date:~10,13%%date:~4,2%%date:~7,2%
    md %today%

    for %%a in (*.zip) do(
    set fileday=%%a:~1,8%
    if %today% = %fileday% (
    move %%a "C:\Users\eyousea\Documents\Test\%today%"

    pause

我不确定是什么错。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

使用echo onecho AProblematicCommand(例如echo set fileday=%%a:~1,8%)来调试批处理文件!

  1. 解析括号中关闭的块,并立即展开%。因此fileday中使用的if值在for循环开始之前包含其值 - 可能未定义!

    您需要启用delayed expansion并使用!标记使用位置。

  2. 您必须在do(之间留出空格。

  3. %a(或%%a中的for)等参数不能用于变量扩展。您必须将其分配给临时变量并展开它。

  4. 您可以在批处理文件中使用缩进,只是为了便于阅读。例如,它有助于找到未闭合的括号。我在代码段中看不到任何)

  5. 总结:

    set today=%date:~10,13%%date:~4,2%%date:~7,2%
    md %today%
    setlocal EnableDelayedExpansion
    
    for %%a in (*.zip) do (
      set filename=%%a
      set fileday=!filename:~1,8!
      if %today% == !fileday! (
        move %%a "C:\Users\eyousea\Documents\Test\%today%"
      )
    )