繁体   English   中英

批量将所有文件移动到可变文件夹名称

[英]Batch moving all files to variable folder name

我有一个批处理过程,该过程在6月中按天组织下载了几个文件。 下载它们之后,我对其进行处理,然后将它们移动到一个文件夹中,并按天分隔。 对于单位数天,将其称为01、02等。因此,我创建了文件夹,然后将其移动:

SETLOCAL EnableDelayedExpansion
SET "year=2015"

for /l %%x (9, 1, 10) do (
    (download files here to C:\mydir\)
    (process files here in C:\mydir\)
    SET "day=0000%%x"
    mkdir C:\mydir\files\%year%-06-!day:~-2!
    move C:\mydir\*.* C:\mydir\files\%year%-06-!day:~-2!
 )

这是我通常会收到的错误:

 The filename, directory name, or volume label syntax is incorrect.

在这种情况下,将创建文件夹,但不会移动文件。 相反,它们只是消失了。

另一个:

 The directory name is invalid.
 Cannot move multiple files to a single file.

在这里,文件只是停留在周围。

我会说运行100次后,几乎总是收到其中一条消息。 一次,它按预期移动。 再过几次,它移动了除一个文件以外的所有文件(而那个文件刚刚消失了)。 还有一次,控制台说它移动了,但是他们没有移动。

我在此块周围有很多代码,因此也许是在干扰这一部分。 但是,没有重复使用任何变量名,我在注释掉所有其他进程的情况下运行了该变量名。 所以我被困在这里。 我在另一个SO线程上找到了日期命名语法,所以我可能还不太了解。

如果没有任何移动,则会引发第一个错误。 请参见下一个示例(从我的CLI窗口复制并粘贴):

==>move D:\xxxx\*.* D:\xxx
D:\xxxx\abc.txt
D:\xxxx\cba.txt
        2 file(s) moved.

==>move D:\xxxx\*.* D:\xxx
The filename, directory name or volume label syntax is incorrect.

==>

我误会了为什么为什么要循环两次代码(对于%x=9%x=10 ): 详细了解FOR /L命令 但是,请尝试if exist C:\\mydir\\*.ext ... .ext if exist C:\\mydir\\*.ext ... ,其中.ext是下载文件的扩展名。 请注意, exist C:\\mydir\\*.*对于任何(甚至是空的)现有文件夹都评估为true

为了捕获第二个错误(声音作为move目标被认为是一个文件,因此在结尾加上反斜杠),我将脚本重写如下:

@ECHO OFF >NUL
SETLOCAL EnableDelayedExpansion
SET "year=2015"
for /l %%x in (9, 1, 10) do (
    rem (download files here to C:\mydir\)
  rem insert here: if exist C:\mydir\*.ext (
    rem (process files here in C:\mydir\)
    SET "day=0000%%x"
    call :myMove
  rem insert here closing parenthesis of 'if' command: )
)
endlocal
goto :eof

:myMove
  echo ON >NUL
  mkdir "C:\mydir\files\%year%-06-%day:~-2%" 2>NUL
  move "C:\mydir\*.*" "C:\mydir\files\%year%-06-%day:~-2%\"
  @ECHO OFF >NUL
goto :eof

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM