Batch file 将文件内容读入变量,并将变量拆分为单独的参数

Batch file 将文件内容读入变量,并将变量拆分为单独的参数,batch-file,command-line,Batch File,Command Line,我尝试在批处理文件中使用变量,其中我有一个具有多个配置的配置文件,配置文件格式的一个示例是: PROCESS=<ftpSiteURL> <username> <rd> <lcd> 通过这个问题,我确定我可以使用以下方法将文件(ftp.txt)中的每一行读入一个参数: for /f "delims== tokens=1,2" %%X in (ftp.txt) do ( SET %%X=%%Y ) 我还阅读了,从中我可以将字符串拆分为所需的

我尝试在批处理文件中使用变量,其中我有一个具有多个配置的配置文件,配置文件格式的一个示例是:

PROCESS=<ftpSiteURL> <username> <rd> <lcd>
通过这个问题,我确定我可以使用以下方法将文件(ftp.txt)中的每一行读入一个参数:

for /f "delims== tokens=1,2" %%X in (ftp.txt) do (
    SET %%X=%%Y
)
我还阅读了,从中我可以将字符串拆分为所需的变量:

for /f "tokens=1,2,3,4" %%a in ("ftp.one.com asmith ftpFolder localFolder") do (
    SET SITE=%%a
    SET USER=%%b
    SET REMOTE=%%c
    SET LOCAL=%%d
)
我的问题是:

如果我回显创建的变量FTP,我什么也得不到;尝试:

%FTP
%%FTP
%FTP%
%%FTP%%

响应FTP变量内容的正确语法是什么,因为这需要替换第二个FOR循环中的硬编码字符串?谢谢@Compo和@aschipfl的评论。真的,快去!瓦尔!添加EnableDelayedExpansion已经修复了这一切

工作代码:

setlocal EnableDelayedExpansion

ECHO ***READ THE CONFIG FILE**
for /f "delims== tokens=1,2" %%X in (ftp.txt) do (
    set %%X=%%Y
    ECHO CONFIG LINE is !FTP!

    ECHO **SPLIT THE LINE INTO PARAMETERS**
    for /f "tokens=1,2,3,4" %%a in ("!FTP!") do (
        SET SITE=%%a
        SET USER=%%b
        SET REMOTE=%%c
        SET LOCAL=%%d
        ECHO Connect to !SITE! as !USER! to download from !REMOTE! to !LOCAL!
    )
)

感谢@Compo和@aschipfl的评论。真的,快去!瓦尔!添加EnableDelayedExpansion已经修复了这一切

工作代码:

setlocal EnableDelayedExpansion

ECHO ***READ THE CONFIG FILE**
for /f "delims== tokens=1,2" %%X in (ftp.txt) do (
    set %%X=%%Y
    ECHO CONFIG LINE is !FTP!

    ECHO **SPLIT THE LINE INTO PARAMETERS**
    for /f "tokens=1,2,3,4" %%a in ("!FTP!") do (
        SET SITE=%%a
        SET USER=%%b
        SET REMOTE=%%c
        SET LOCAL=%%d
        ECHO Connect to !SITE! as !USER! to download from !REMOTE! to !LOCAL!
    )
)

引用变量的正确方法是
%FTP%
——除非在代码块中设置并使用它(用括号括起来),否则必须使用and
!FTP(就像已经建议的Compo一样)环境变量(通常)由
%FTP%
引用和扩展。不管怎么说,你想要实现什么?是否要使用参数一个接一个地执行
过程
?我这样问是因为我怀疑这个问题可能构成一个……为了简单起见,假设我将使用用户连接到FTP站点(从命令行),并将文件从FTPFOLDER下载到LOCALFOLDER。我们有很多FTP源代码可供下载,并且希望有一个脚本,引用一个参数文件来循环该脚本,而不是加载单独的脚本。引用变量的正确方法是
%FTP%
-除非在代码块中设置并使用它(括在括号中),否则必须使用和
!FTP(就像已经建议的Compo一样)环境变量(通常)由
%FTP%
引用和扩展。不管怎么说,你想要实现什么?是否要使用参数一个接一个地执行
过程
?我这样问是因为我怀疑这个问题可能构成一个……为了简单起见,假设我将使用用户连接到FTP站点(从命令行),并将文件从FTPFOLDER下载到LOCALFOLDER。我们有很多FTP源代码可供下载,希望有一个脚本,引用一个参数文件来循环,而不是加载单独的脚本。您知道,您可以直接使用
%%X
变量吗
echo Connect to%%a as%%b要从%%c下载到%%d
第一次
For
您也可以使用
For/f“delims=“%%x in(ftp.txt)do set”%%x”
对于“Connect”一个,我更喜欢设置变量,因为我有一大堆代码/逻辑要为FTP连接和变量编写,这将使它更易于阅读/维护,但我同意简化第一个,因为它只使用一次。此外,一旦完成,脚本和配置将由比我技术水平更低的人维护,因此清晰性将帮助他们。听起来像是一堆命令对他们很有帮助。你知道,你可以直接使用
%%X
变量吗
echo Connect to%%a as%%b要从%%c下载到%%d
第一次
For
您也可以使用
For/f“delims=“%%x in(ftp.txt)do set”%%x”
对于“Connect”一个,我更喜欢设置变量,因为我有一大堆代码/逻辑要为FTP连接和变量编写,这将使它更易于阅读/维护,但我同意简化第一个,因为它只使用一次。此外,一旦完成,脚本和配置将由可能比我技术水平更低的人维护,因此清晰性将帮助他们。听起来像是一堆命令对他们很有帮助。