您好我想创建一个批处理文件,它创建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文件,这是源代码部分。
答案 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是逗号分隔的列表所有数字都不允许