如何在同时创建的子目录中创建的文件名中包含父文件夹的名称?

时间:2015-01-30 12:49:47

标签: batch-file

首先,感谢有关此主题的所有已回答的问题,对我帮助很大。

我创建了一个创建文件夹和虚拟文件的批处理文件,因为我们一遍又一遍地为不同的客户使用该结构。

非常简单:

mkdir "0. Folder 0"
mkdir "1. Folder 1"
mkdir "2. Folder 2"
mkdir "3. Folder 3"
mkdir "4. Folder 4"
mkdir "5. Folder 5"
mkdir "6. Folder 6"
mkdir "7. Folder 7"
mkdir "8. Folder 8"

type nul > "3. Folder 3"\"ADMIN - Random Dummy filename".xlsx
type nul > "3. Folder 3"\"ADMIN - Random Dummy filename".pdf
type nul > "3. Folder 3"\"ADMIN - Random Dummy filename".pdf
type nul > "3. Folder 3"\"ADMIN - Random Dummy filename".xlsx

现在我的问题是,如果我们创建这些子文件夹的客户端文件夹被追加到名称中,那就超级了。

例如: 客户名称:TEST_CLIENT_2015_FINAL

结果: TEST_CLIENT_2015_FINAL \ 3。文件夹3 \ TEST_CLIENT_2015_FINAL - Random Dummy filename.pdf

希望有人可以帮助我?

2 个答案:

答案 0 :(得分:1)

如果在目录 TEST_CLIENT_2015_FINAL 中执行该批处理文件,则可以使用该批处理文件:

@echo on
setlocal EnableDelayedExpansion

rem Get name of current working directory.
for /F "delims=" %%D in ("%CD%") do set "ParentFolder=%%~nxD"

rem Create subdirectories in current working directory from 0 to 8 in steps of 1.
rem And create in each subdirectory 2 files with name of current directory in name.
for /L %%V in (0,1,8) do (
    set "FolderName=%%V. Folder %%V"
    mkdir "!FolderName!"
    type nul>"!FolderName!\%ParentFolder% - Random Dummy filename.pdf"
    type nul>"!FolderName!\%ParentFolder% - Random Dummy filename.xlsx"
)
endlocal

要了解使用的命令,请打开命令提示符窗口并运行:

  • for /?
  • mkdir /?md /?
  • set /?
  • setlocal /?

使用参数/?启动命令会输出此命令的帮助。

答案 1 :(得分:1)

您似乎要问的是,"如何在批处理脚本中使用变量?"

就像在代数中一样:

5 * x = 10

您可以推断x = 2。几乎所有脚本语言都提供相同类型的约定。在批处理脚本中,您通过

设置变量
set "x=10"

等号两边没有空格。然后,要检索x的值,请将其括在%个符号中。如果你做了

set "x=10"
echo %x%

...然后10会打印到屏幕上。

这是基础知识。下一步是了解for循环。 for循环允许您反复重复相同的命令或命令块,其中变量随每次迭代而变化。例如:

for %%I in (apples oranges pineapples) do echo %%I

...会回应

apples
oranges
pineapples

看看它是如何工作的?您可能已经注意到,for循环与变量交互,语法略有不同,左侧有百分号。

这可能足以帮助您了解我在下面提供的解决方案。

看起来你的脚本有很多重复,只是增加了数字。我认为使用几个循环来创建测试结构要容易得多。

@echo off
setlocal

rem // optional syntax: script.bat "client name"
set "client=TEST_CLIENT_2015_FINAL"
if not "%~1"=="" set "client=%~1"

rem // md is a synonym for mkdir
md "%client%"

rem // let %%I=I+1, starting at 0 and ending with 8
for /L %%I in (0,1,8) do (

    md "%client%\%%I. Folder %%I"

    rem // Run the same command, letting %%e=xlsx the first loop, pdf the next
    rem // You can add docx, pptx, and other extensions here if you wish.
    for %%e in (xlsx pdf) do (
        type NUL > "%client%\%%I. Folder %%I\%client% - Random Dummy filename.%%e"
    )
)