Batch file 在file.txt中执行批处理循环以分块大文件夹

Batch file 在file.txt中执行批处理循环以分块大文件夹,batch-file,Batch File,我想将一个包含超过200000个文件的巨大文件夹分块到子文件夹中 我的源代码的结构(示例简化): 因此每个文件的每个名称都是唯一的。 因此,我使用以下命令创建txt文件: dir %Source% /s /b /a-d > %Target%\input.txt 现在我想每10000个文件创建一个子文件夹,因此: Set NameSubF = 0 Set MaxLimit = 1000 FOR /F "tokens=* delims=" %%a IN (input.txt) DO (

我想将一个包含超过200000个文件的巨大文件夹分块到子文件夹中

我的源代码的结构(示例简化):

因此每个文件的每个名称都是唯一的。

因此,我使用以下命令创建txt文件:

dir %Source% /s /b /a-d > %Target%\input.txt
现在我想每10000个文件创建一个子文件夹,因此:

 Set NameSubF = 0
 Set MaxLimit = 1000
 FOR /F "tokens=* delims=" %%a IN (input.txt) DO (
    if %%a==!MaxLimit 
****这里我丢失了,但我想创建一个新的子文件夹****

    COPY "%%a" "%destfolder%\%%~nxa"
这应该可以工作(不要忘记调整文件夹):

此代码要求文件具有不同的名称。如果存在类似于
C:\a\file.txt
的文件,并且也存在类似于
C:\B\sdklfj\XYZ\file.txt
的文件,则可能会将它们复制到相同的目标文件夹中。在这种情况下,将覆盖
C:\A\file.txt

最后一点:当批量编码时,不要把空格放在不需要的地方!以下是原因(u表示空间):

或者这个:

@ECHO OFF
SET a=hello
SET a =123
ECHO %a%
ECHO %a %
将输出以下内容:

hello
123

当处理数字时,批处理会自动更正其中一些问题,但当处理字符串时,这真是一团糟!为了避免这种情况,只需编写
set x=y
而不是
set x=y
set“x=y”

我认为最好提供一个起始树结构和目标结构的示例,最好使用真实的文件名和目录名。在这种情况下,真实的文件名和目录名并不重要,对吗?问题是,当只提供了一个最小的代码片段,而其他项目没有提供时,我们必须尝试猜测一些事情,通常必须提供效率较低或更基本的代码。这是为了让OP或未知能力的人尝试修改它,以便他们可以将其插入现有的未提供的代码中。非常感谢。你能解释一下“SET/a前缀=%%a/%MaxLimit%”吗?@DanielE<代码>%%A是行号。因此,我们将行号除以1000或10000,或者除以每个目录中要包含的文件数。由于批处理不支持小数,结果将累加到下一个1000的倍数(例如4711/1000=4)。这就是计算前缀的方法。它总是返回较低的整数?
SET a=hello    ::%a% is hello
SET b =hello   ::%b% doesn't exist but %b_% does and it is equal to %a%
SET c= hello   ::%c% is _hello so %a% != %c%
SET d = hello  ::%d% doesn't exist but %d_% does and it is equal to %c% but not to %b_% or %a%
@ECHO OFF
SET a=hello
SET a =123
ECHO %a%
ECHO %a %
hello
123