创建数千个具有不同名称的文件夹

时间:2015-02-19 13:57:13

标签: batch-file cmd directory

我必须创建几千个目录。 目录看起来像这样:10P001是YEAR / P,S,L,R,F / Numberfrom001to600

这些字母不是系统的,所以我必须为每个文件夹写它们。

我的脚本直到现在看起来像这样,但是cmd不喜欢for循环。

     @echo off
setlocal enabledelayedexpansion
set /p jahr=Welches Jahr?
set /p anzahl=Wieviele Projekte?
set looop=%anzahl+1000

for /l %%x in (1001, 1, looop) do (
    set nummer=%%x
    set /p welches=P1 S2 L3 R4 F5 nichtexistent6?
    if %welches%==1 mkdir %jahr%P!nummer:~-3!
    if %welches%==2 mkdir %jahr%S!nummer:~-3!
    if %welches%==3 mkdir %jahr%L!nummer:~-3!
    if %welches%==4 mkdir %jahr%R!nummer:~-3!
    if %welches%==5 mkdir %jahr%F!nummer:~-3!
    if %welches%==6 echo "nicht existent"
)
pause

2 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "tokens=1,2delims= " %%a IN (q28608207.txt) DO ( 
 FOR /l %%x IN (1001,1,1011) DO (
  SET seq=%%x
  ECHO(MD %%a%%b!seq:~-3!
 )
)

GOTO :EOF

我使用了一个名为q28608207.txt的文件,其中包含了我的测试数据。

10 P
10 S

例程从文件中读取%%a%%b中的两个字段,然后从1001乘1到1011变换%%x的循环(当然可以是1600 - 1011)只是证明了这一点),将%%x复制到临时可靠的(因为子串可以应用于元变量%%x)创建一个名为%% a %% b的目录和最后3个字符临时变量。

请注意,setlocal enabledelayedexpansion命令可以使用!var!(随着时间的变化访问var的值)

所需的MD命令仅用于ECHO用于测试目的。 在您确认命令正确之后,将ECHO(MD更改为MD以实际创建目录。附加2>nul以禁止错误消息(例如,当目录已存在时)


创建包含所需数字的文件:

@echo off
setlocal enabledelayedexpansion
set /p jahr=Welches Jahr?
set /p anzahl=Wieviele Projekte?
set looop=%anzahl+1000

(
for /l %%x in (1001, 1, looop) do (
    set nummer=%%x
    echo %jahr%P!nummer:~-3!
)
)>J%jahr%.txt

这将在J14.txt

中生成一个列表(例如jahr = 14)
14P001
14P002
14P003

然后您需要做的就是编辑文件(使用记事本,而不是文字处理器)来替换" P"无论什么字母都需要。删除任何不需要目录的行。

然后可以使用

将生成的文件处理到目录
@ECHO OFF
SETLOCAL
FOR /f %%a IN (J14.txt) DO ( 
  ECHO(MD "%%a"
)
GOTO :EOF

答案 1 :(得分:0)

我现在的解决方案(我知道它比坏习惯更糟糕,但它起作用并且会节省我很多时间(或者至少我的公司有些钱)):

 @echo off
setlocal enabledelayedexpansion
set /p jahr=Welches Jahr?
set /p anzahl=Wieviele Projekte?
set /a looop=%anzahl%+1000
set /a count=1001
:LoopStart
    set /p welches=P1 S2 L3 R4 F5 nichtexistent6?
    if !welches!==1 mkdir %jahr%P!count:~-3!
    if !welches!==2 mkdir %jahr%S!count:~-3!
    if !welches!==3 mkdir %jahr%L!count:~-3!
    if !welches!==4 mkdir %jahr%R!count:~-3!
    if !welches!==5 mkdir %jahr%F!count:~-3!
    if !welches!==6 echo "nicht existent"

set /a count=%count%+1
if %count% leq %looop% (goto LoopStart) else (goto:eof)
pause