Windows Cmd循环名称和创建文件夹

时间:2016-01-20 15:40:08

标签: windows loops batch-file for-loop cmd

我正在尝试弄清楚如何在Windows批处理文件中创建一定数量的文件夹。我想问用户他们想要多少文件夹,然后使用收集的数字来循环询问这些文件夹的名称并制作它们。以下是我到目前为止的情况:

pushd C:\Users\%username%\Desktop

set /p FolderLoop="How many folders?: " 

for /l %%x in (1, 1, %FolderLoop%) do (
    set /p folder="Folder: " %%x
    md %folder% %%x
)

我一直存在的问题是我无法使用正确的收集名称制作文件夹。到目前为止,我最接近的是创建适当数量的文件夹,但使用基于FolderLoop变量的顺序数字名称(1,2,3等)。

2 个答案:

答案 0 :(得分:2)

您需要阅读有关delayedexpansion

的数百个关于SO的回复

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。块中的任何%var%将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于{{1 }}

在块语句FOR ... DO (block)中,应使用(a parenthesised series of statements)语句而不是断标签注释表单(REM),因为标签终止块,使:: comment混淆。< / p>

因此,cmd将在遇到IF (something) else (somethingelse)时使用%variables%的值执行。

解决此问题的两种常见方法是1)使用IF并使用setlocal enabledelayedexpansion代替!var!来访问已更改的%var%或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

请注意使用显示var更改值的CALL ECHO %%var%%var显示,但遗憾的是RESETS错误级别。

答案 1 :(得分:1)

您需要delayed expansion

setlocal enabledelayedexpansion
pushd C:\Users\%username%\Desktop
set /p FolderLoop="How many folders?: " 
for /l %%x in (1, 1, %FolderLoop%) do (
    set /p "folder=Folder: " 
    md "!folder!"
)

%%x之后的set /p什么也没做。我删除了它。我也从md删除了它,你不需要它 - 除非你想让计数器成为其中的一部分foldername。)