【问题标题】:Windows Cmd Loop name and create foldersWindows Cmd 循环名称和创建文件夹
【发布时间】:2016-01-20 15:40:08
【问题描述】:

我试图弄清楚如何在 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 等)。

【问题讨论】:

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


    【解决方案1】:

    您需要阅读关于 SO 的数百条关于delayedexpansion 的回复。

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

    在块语句中应使用(a parenthesised series of statements)REM 语句而不是损坏标签的备注形式 (:: comment),因为标签终止块,混淆 cmd

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

    解决此问题的两种常见方法是 1) 使用 setlocal enabledelayedexpansion 并使用 !var! 代替 %var% 来访问 var 的更改值或 2) 调用子程序以使用改变了值。

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

    【讨论】:

    • 这是非常深入和信息丰富的。非常感谢!
    【解决方案2】:

    你需要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!"
    )
    

    set /p 之后的 %%x 什么都不做。我删除了它。我还从 md 中删除了它,您不需要它 - 除非您希望计数器成为文件夹名称的一部分。)

    【讨论】:

    • 就是这样!谢谢!我可以说它基本上忽略了我试图为文件夹名称调用的变量。这解决了它! (一件事,仅针对其他读者,延迟启用延迟扩展缺少 e。:))
    • e 插入...顺便说一句,你也可以使用%userprofile%\desktop
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多