批量循环file.txt到chunk大文件夹

时间:2018-02-13 08:29:12

标签: batch-file

我想在子文件夹中包含超过200 000个文件的大文件夹

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

Source Folder
   |_ Sub1
       |_ Sub1_file1.txt
       |_ Sub1_file2.txt
   |_ Sub2
       |_Sub2_file1.txt
       |_ ...
       |_Sub2_file11111.txt

所以每个文件的每个名字都是唯一的。

所以我用:

创建txt文件
dir %Source% /s /b /a-d > %Target%\input.txt

现在我想每10 000个文件创建一个新的子文件夹,所以:

 Set NameSubF = 0
 Set MaxLimit = 1000
 FOR /F "tokens=* delims=" %%a IN (input.txt) DO (
    if %%a==!MaxLimit 

****我迷路了,但我想创建一个新的子文件夹****

    COPY "%%a" "%destfolder%\%%~nxa"

1 个答案:

答案 0 :(得分:1)

这应该有效(不要忘记调整destfolder):

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET destfolder=I:\SomeFolder\Folder
SET MaxLimit=1000
FOR /F "tokens=1,2,3 delims=:" %%A IN ('findstr /r /n "^" input.txt') DO (
    SET /a prefix=%%A/%MaxLimit%
    SET dest=%destfolder%!prefix!
    IF NOT EXIST !dest! mkdir !dest!
    COPY I:\list.txt "!dest!\%%~nxC"
)

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

最后一点:批量编码时,不要在不需要的地方放置空格!这就是为什么(_表示空间):

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

使用数字批处理时会自动更正其中一些问题,但在使用字符串时,这真是一团糟!为避免这种情况,只需撰写set x=y而不是set x = yset "x=y"