【问题标题】:creating thousands of folders with different names创建数千个不同名称的文件夹
【发布时间】:2015-02-19 13:57:12
【问题描述】:

我必须创建几千个目录。 目录如下所示: 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

【问题讨论】:

  • 您没有在程序中使用anzahl。它适合在哪里?您不能 set 块内的变量(带括号的命令序列)使用 %var% 访问 changed 值;你必须使用setlocal enabledelayedexpansion,然后使用!var~(或!welches!在你的情况下)访问changed
  • anzahl 尚未使用,我从代码示例中删除了它,对此感到抱歉。问题不在于 %welches%,它是有效的。问题是 for 循环不起作用并且 %%x%%
  • 很难看出你在做什么。您需要在if 语句中使用!welches!,而不是%welches%,因为您要在for /L %%x... 块内更改welches。您是否知道您的设置方式将为您要创建的每个(600?)条目输入响应?
  • 我必须为每个条目输入一个响应,因为字母 SPDFLR 不是系统的,我必须从项目手写的文件夹中读取它。我必须创建这样的文件夹:14P001 14S002 14P003 14L004 14R005 14R006 14R007 14P008 等我不熟悉 windows 命令。直到现在我进入了喜欢他的项目:mkdir 14P003 14L004 14R005 14R006 14R007 14P008 等,这需要很长时间
  • 这是从手写的纸片还是从文件中读取的?如果来自文件,请发布文件样本。

标签: batch-file cmd directory


【解决方案1】:
@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,然后循环将%%x 从1001 变为1 到1011(它当然可以是1600 - 1011 只是证明了这一点),将%%x 复制到一个临时变量(因为子字符串不能应用于元变量%%x)创建一个名为%%a%%b 的目录和临时变量的最后3 个字符。

注意setlocal enabledelayedexpansion 命令启用!var! 的使用(访问var 的值,因为它会有所不同)

所需的 MD 命令仅用于测试目的ECHOed。 验证命令正确后,将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

【讨论】:

  • 非常感谢您的回答。现在唯一不起作用的是 FOR 循环。程序在尝试进入 for 循环时崩溃。 for /l %%x in (1001, 1, 1500) do ( //do stuff here ) 以某种方式不起作用
  • 如果不确切地看到您使用的代码,就无法判断问题所在。请edit您的问题包括您的代码的精确副本(通过剪切和粘贴)。正如发布的那样,它对我来说非常愉快。另请说明崩溃报告是什么。
  • 我已经编辑了主要问题以显示现在的代码。没有错误信息,程序只是跳过循环
  • @Stephan 是的,那是真的,但是有一个错误说 mkdir 不能使用句法......好吧,我做了一些你们都会讨厌我的事情,它在我的回答中 :)
【解决方案2】:

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

 @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

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 2015-01-02
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多