批处理文件生成n个文件夹

时间:2016-02-24 11:33:11

标签: windows batch-file batch-processing

您好我想创建一个批处理文件,它创建n个文件夹并将它们移动到指定的目录。像make folders {00001-00009}这样的话直言不讳。我不想手动输入每个号码,我也希望能够排除数字。

到目前为止,我已尝试过以下代码。我得到了用C:\ source \制作的5个文件夹 我可以通过将j=5更改为任何整数来指示它们如何命名到某个范围,但有时文件会从00256-003372创建文件夹,而不是我指定的文件夹。当我将j更改为j=256并运行程序时会发生这种情况。

echo off
cd C:\source\ :: I included this because for some reason folder 1 copied to root 
SET /a j=1
:floop
IF %j%==5 GOTO END 
md 00%j% 
cd 00%j% 
SET /a j=%j%+1 
cd C:\source\
GOTO FLOOP
:end 

我这样做的另一种方法是手动输入.bat文件中的每个数字,如下所示。哪个工作正常,但我必须为每个文件夹创建一行。

md C:\Device_Numbers_Folder\00001
md C:\Device_Numbers_Folder\00002

P.S我将dir文件命名为source,因为我正在运行一堆带有CALL的.bat文件,这是源代码部分。

1 个答案:

答案 0 :(得分:1)

我想你想要这样的东西:

@echo off
setlocal EnableDelayedExpansion
::CD "C:\source\"

::only change these three lines
set "start=1"
set "amount=5"
set "length=5"
set "exclude=4,5"

set "excluded=0"
FOR %%G IN (%exclude%) DO (set /a "excluded+=1")
set /a "last=%start%+%amount%+%excluded%"
for /l %%i in (%start%,1,%last%) do (
    set "skip=0"
    FOR %%G IN (%exclude%) DO (if "%%i"=="%%G" set "skip=1")
    if !skip! equ 0 (
    set "folderName=0000000000%%i"
    set "folderName=!folderName:~-%length%!"
    md "!folderName!"
    )
)

在此开头是第一个数字,amount是需要创建的文件夹数量,length是新文件名称的长度,因此长度为5的1变为00001.Exclude是逗号分隔的列表所有数字都不允许