我想在子文件夹中包含超过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"
答案 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 = y
或set "x=y"
。