windows 批处理循环从包含环境变量的列表中创建文件夹

jdzmm42g  于 2023-06-24  发布在  Windows
关注(0)|答案(2)|浏览(142)

我有一个包含目录路径列表的文件。我想在这些位置创建目录。路径有系统环境变量,设置为系统属性->环境变量。就像这样:

$COMPLETE_DIR/type1
$COMPLETE_DIR/type1
$COMPLETE_DIR/type1
$INCOMPLETE_DIR/type2
$INCOMPLETE_DIR/type3
$INCOMPLETE_DIR/type4

我做了一个小循环,用来创建如上所示的目录:

@echo off
setlocal enabledelayedexpansion

set "input_file=FolderList.txt"

for /F "usebackq delims=" %%a in ("%input_file%") do (
    set "directory_name=%%~a"
    echo Creating directory: !directory_name!
    if exist "!directory_name!" (
        echo Directory already exists: !directory_name!
    ) else (
        mkdir "!directory_name!" || (
            echo Failed to create directory: !directory_name!
        )
    )
)

echo All directories created or checked successfully.
pause

但这并没有扩展环境变量。我试着关闭延迟扩展,但是for循环中断,只创建了一个目录。如何部分延迟扩展?

wz3gfoph

wz3gfoph1#

您的文件有 * 不 * 批处理文件“环境变量”...在继续之前,假设变量的名称只是COMPLETE_DIR而不是$COMPLETE_DIR(这是在其他语言中访问变量值的方式)。
如果您将文件更改为:

!COMPLETE_DIR!/type1
!COMPLETE_DIR!/type2
!COMPLETE_DIR!/type3
!INCOMPLETE_DIR!/type2
!INCOMPLETE_DIR!/type3
!INCOMPLETE_DIR!/type4

...然后你可以使用你的变量与你完全相同的代码。
这一行:

set "directory_name=%%~a"

...暗示执行此操作(用第一行read替换%%~a后):

set "directory_name=!COMPLETE_DIR!/type1"

当然,之后COMPLETE_DIR环境变量会像往常一样通过Delayed Expansion扩展!

mqxuamgl

mqxuamgl2#

@echo off
setlocal enabledelayedexpansion

set "input_file=FolderList.txt"

for /F "usebackq delims=" %%a in ("%input_file%") do (
    set "directory_name=%%~a"
    
    rem Expand environment variables using regular expansion
    call set "expanded_directory_name=!directory_name!"
    
    echo Creating directory: !expanded_directory_name!
    
    if exist "!expanded_directory_name!" (
        echo Directory already exists: !expanded_directory_name!
    ) else (
        mkdir "!expanded_directory_name!" || (
            echo Failed to create directory: !expanded_directory_name!
        )
    )
)

echo All directories created or checked successfully.
pause

尝试使用上面的脚本

相关问题