Batch file 在file.txt中执行批处理循环以分块大文件夹
我想将一个包含超过200000个文件的巨大文件夹分块到子文件夹中 我的源代码的结构(示例简化): 因此每个文件的每个名称都是唯一的。 因此,我使用以下命令创建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 (
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