gpt4 book ai didi

windows - 如何使用从文本文件读取的环境变量设置变量

转载 作者:可可西里 更新时间:2023-11-01 11:06:53 24 4
gpt4 key购买 nike

我创建了以下配置文件,其中包含批处理文件要使用的参数:

文件winscp.conf:

folder    %appData%\winscp
version 5.7.4
visit http://sourceforge.net/projects/winscp/files/WinSCP/
download http://sourceforge.net/projects/winscp/files/WinSCP/5.7.4/winscp574.zip

批处理文件(get.bat):

@echo off
setlocal

@if not exist "%1" (
echo Config file not found in "%1"
exit /B
)
@for /f "tokens=1,2 delims= " %%A in (%1) do (
set %%A=%%B
)

mkdir %folder%

当我这样调用批处理文件时:

get.bat winscp.conf

我在当前文件夹中创建了一个子文件夹 %appData%\winscp,如下所示:

c:\Temp\%appData%\winscp

虽然我想要的是在 Windows 应用程序数据文件夹中创建的 winscp 文件夹,如下所示:

C:\Users\Caffe\AppData\Roaming\winscp

我认为声明 set %%A=%%B 有问题,因为如果我将其更改为 set %%A=%appData%\winscp我确实按照我想要的方式创建了文件夹。

最佳答案

我只是总结了wOxxOm的答案和 JosefZ添加一些小的改进。

@echo off
setlocal EnableExtensions
set "ConfigFile=%~1"

if "%ConfigFile%" == "" (
echo %~nx0 must be called with name of configuration file
echo as first parameter, for example: %~nx0 winscp.conf
goto EndBatch
)

if not exist "%ConfigFile%" (
echo Config file "%ConfigFile%" not found.
goto EndBatch
)

set "folder="

for /F "usebackq tokens=1*" %%A in ("%ConfigFile%") do call set "%%A=%%B"

if "%folder%" == "" (
echo Option "folder" not defined in config file "%ConfigFile%".
goto EndBatch
)

mkdir "%folder%" 2>nul

:EndBatch
endlocal

为了更好地阅读传递给批处理文件的第一个参数应该是什么,该参数立即分配给一个环境变量,不带引号,如果带或不带路径的配置文件名包含至少一个空格字符,则必须使用引号。

接下来检查是否使用参数调用了批处理文件。

FOR 循环之后,验证配置文件是否确实包含 folder 的条目。

目录的创建使用引号,因为文件夹路径可以包含空格,并将任何错误消息重定向到设备 nul,即如果目录已经存在,则抑制错误消息输出。

关于windows - 如何使用从文本文件读取的环境变量设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com