[英]batch file to count all files in a folder and subfolder files and write output file in folder name using batch file
[英]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.