Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 批量将所有文件移动到可变文件夹名称_Windows_Batch File - Fatal编程技术网

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

Windows 批量将所有文件移动到可变文件夹名称,windows,batch-file,Windows,Batch File,我有一个批处理过程,在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\)

我有一个批处理过程,在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线程上发现了日期命名语法,所以可能我还没有完全理解它

如果没有可移动的对象,则会引发第一个错误。请参见从my 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循环两次代码:。但是,如果存在,请尝试C:\mydir\*.ext。。。其中.ext是下载文件的扩展名。请注意,对于任何甚至为空的现有文件夹,exist C:\mydir\*.*的计算结果为true

为了捕捉第二个错误,因为移动目标被认为是一个文件,所以最后用一个尾随的反斜杠结束它,我将重写脚本,如下所示:

@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

`移动C:\mydir**C:\mydir\files\%year%-06-!日期:~-2!\`用后面的反斜杠结束目标目录?是的,试过了。遗憾的是,这并没有什么不同。循环代码两次只是为了说明我在多天内运行它,所以在这种情况下,我会为第9天、第10天创建文件夹。无论如何,使用%而不是!今天工作顺利-谢谢。