优化批处理脚本以在创建文件夹时创建一组子文件夹

优化批处理脚本以在创建文件夹时创建一组子文件夹

这是我在这里的第一篇帖子。我在这个领域还很菜鸟,所以如果我问了一些非常基础的问题,请见谅...

案子...

因此,我需要创建一个批处理文件,该文件要求输入项目编号和名称,并创建一个具有设定编号和名称的文件夹,以及其中的一组特定子文件夹。类似于这棵树(子文件夹的名称简化,元素数量减少)

 number name  
        ├───01.SF A  
        │   ├───01.SF A1
        │   └───02.SF A2
        ├───02.SF B
        │   ├───01.SF B1
        │   ├───02.SF B2
        │   └───03.SF B3
        ├───03.SF C
        │   ├───01.SF C1
        │   ├───02.SF C2
        │   ├───03.SF C3
        │   ├───04.SF C4
        │   └───05.SF C5
        ├───04.SF D
        └───05.SF E
            ├───01.SF E1
            ├───02.SF E2
            ├───03.SF E3
            └───04.SF E4

基本上每次开始新项目时都会用到它。

代码...

因此,按照@Pimp Juice IT 的回答这个帖子我为批处理文件创建了以下代码:

@ECHO Off

SET /P "NUM=Project number "
SET /P "NOM=Project name "
SET "PNUM=%NUM% "
SET RootDir=%userprofile%\Desktop\%PNUM%%NOM%
SET SubA="01.SF A","02.SF B","03.SF C","04.SF D","05.SF E"

SET Sub1="01.SF A1","02.SF A2"
SET Sub2="01.SF B1","02.SF B2","03.SF B3"
SET Sub3="01.SF C1","02.SF C2","03.SF C3","04.SF C4","05.SF C5"
SET Sub5="01.SF E1","02.SF E2","03.SF E3","04.SF E4"

FOR %%A IN (%SubA%) DO IF NOT EXIST "%RootDir%\%%~A" MD "%RootDir%\%%~A"

FOR %%1 IN (%Sub1%) DO IF NOT EXIST "%RootDir%\01.SF A\%%~1" MD "%RootDir%\01.SF A\%%~1"
FOR %%2 IN (%Sub2%) DO IF NOT EXIST "%RootDir%\02.SF B\%%~2" MD "%RootDir%\02.SF B\%%~2"
FOR %%3 IN (%Sub3%) DO IF NOT EXIST "%RootDir%\03.SF C\%%~3" MD "%RootDir%\03.SF C\%%~3"
FOR %%5 IN (%Sub5%) DO IF NOT EXIST "%RootDir%\05.SF E\%%~5" MD "%RootDir%\05.SF E\%%~5"

EXIT

令我惊讶的是,它竟然如此有效!(感谢 Pimp Juice IT!)

实际RootDir是为了测试目的,也是SET "PNUM=%NUM% "我在数字和名称之间添加空格的方式:(

MD...这个想法是当结构随着时间的推移而改变/增长时,不必为每个文件夹添加新的一行。

但在我看来,我缩放示例的方式产生了非常低效和静态的代码……特别是考虑到可扩展性。我问的是它是否可以改进/简化为更好和更参数化的代码。

疑问...

总的来说,我希望参数化并优化该过程,这样当文件夹更改名称或在现有文件夹之间出现新文件夹时,它会自动调整。
也许必须从头开始重新考虑代码!

#1

在未来的某个时间点,结构会被重新设计,并且二级文件夹会更改名称(从那时起)。

即:01.SF A更改为01.OTHERNAME A。它在 for
中被更改
SET SubA="01.SF A","02.SF B","03.SF C","04.SF D","05.SF E"

SET SubA="01.OTHERNAME A","02.SF B","03.SF C","04.SF D","05.SF E"

但随后需要
"%RootDir%\01.SF A\%%~1"
手动更改
"%RootDir%\01.OTHERNAME A\%%~1"

有没有办法将其参数化?例如引用设置值的第二个实例?比如%RootDir%\second value of SubA\%%~1"

#2

如果结构发生变化且不再需要文件夹,或者需要在示例结构中添加新文件夹(从那时起),则需要手动更新文件夹的编号。

即:02.SF C2将不再在结构中,然后
03.SF C3 04.SF C405.SF C5
必须更改为
02.SF C3 03.SF C404.SF C5
目前需要手动完成

有没有办法自动增加文件夹名称中的编号?这样当出现新文件夹时,编号就会自动调整

#3

除了用此声明新变量外,还可以在文件名中添加空格吗?SET "PNUM=%NUM% "

#4

整个过程可以像示例中的 Pimp Juice IT 那样嵌套进行吗FOR?(我试图思考如何做,但我的大脑有点蓝屏)

#5

最后,这对于批处理文件来说正确吗?或者它更适合 powershell 脚本?

非常感谢您付出的时间和耐心!

相关内容