batch-file - 数组索引不返回值

标签 batch-file

我有两个文本文件,一个存储我需要复制的文件的名称,一个存储我要复制它们的地址。我的想法是创建两个数组来存储该信息,然后循环遍历它们,这样我总能得到文件名和相应的地址。这是我用来将信息存储在数组中的代码:

@echo off
set /A i=0
set x=0

for /F "usebackq delims=" %%a in ("Name.txt") do (
    set /A i+=1
    call echo %%i%%
    call set NAME_ARRAY[%%i%%]=%%a
    call set n=%%i%%
)

set /A i=0

for /F "usebackq delims=" %%a in ("Adress.txt") do (
    set /A i+=1
    call echo %%i%%
    call set ADRESS_ARRAY[%%i%%]=%%a
    call set n=%%i%%
)

然后我遍历这两个数组并尝试处理它们:

for /L %%j in (1,1,%n%) do (
:: subproject dir, relative to the sandobox dir
set SUBPROJECT_DIR=%ADRESS_ARRAY[%%j]%
:: sandbox name
set SANDBOX_NAME=C:\%SANDBOX_FOLDER_NAME%\%SUBPROJECT_DIR%\project.pj
:: name of sandbox folder
set SANDBOX_DIR=C:\%SANDBOX_FOLDER_NAME%\%SUBPROJECT_DIR%
:: name of presentation to be copied
set PRESENTATION_NAME=%NAME_ARRAY[%%j]%

:: check out file with software version number
si co --sandbox=%SANDBOX_NAME% --changePackageId=:none --hostname=%SERVERNAME% --port=%PORTNAME%  %SANDBOX_DIR%\%PRESENTATION_NAME%

:: Copying new files (Option /xo of robocopy)
robocopy x: %SANDBOX_DIR% %PRESENTATION_NAME%

:: check in modified file
si ci --sandbox=%SANDBOX_NAME% --changePackageId=:none --hostname=%SERVERNAME% --port=%PORTNAME% %SANDBOX_DIR%\%PRESENTATION_NAME%
)

我的问题是,我似乎无法通过索引读取数组。 set SUBPROJECT_DIR=%ADRESS_ARRAY[%%j]%set PRESENTATION_NAME=%NAME_ARRAY[%%j]%似乎没有设置变量,它们仍然是空的。有人知道为什么吗?

最佳答案

您的建议使我走上了正确的道路。这是现在可用的版本,以防其他人遇到同样的问题:

for /L %%j in (1,1,%n%) do (
:: subproject dir, relative to the sandobox dir
call set SUBPROJECT_DIR=%%ADRESS_ARRAY[%%j]%%
:: sandbox name
call set SANDBOX_NAME=C:\%SANDBOX_FOLDER_NAME%\%%SUBPROJECT_DIR%%\project.pj
:: name of sandbox folder
call set SANDBOX_DIR=C:\%SANDBOX_FOLDER_NAME%\%%SUBPROJECT_DIR%%
:: name of presentation to be copied
call set PRESENTATION_NAME=%%NAME_ARRAY[%%j]%%

:: check out file
call si co --sandbox=%%SANDBOX_NAME%% --changePackageId=:none --hostname=%SERVERNAME% --port=%PORTNAME%  %%SANDBOX_DIR%%\%%PRESENTATION_NAME%%

:: Copying new files (Option /xo of robocopy)
call robocopy x: %%SANDBOX_DIR%% %%PRESENTATION_NAME%%

:: check in modified file
call si ci --sandbox=%%SANDBOX_NAME%% --changePackageId=:none --hostname=%SERVERNAME% --port=%PORTNAME% --description="Automated weekly update." %%SANDBOX_DIR%%\%%PRESENTATION_NAME%%
)

关于batch-file - 数组索引不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39390813/

相关文章:

batch-file - 无法使用 SASL_PLAINTEXT 身份验证启动 Kafka 服务器

batch-file - 命令提示符仅复制文件夹和子文件夹中的图像

java - 从 java 类 : 启动 .bat 文件

powershell - 任务计划程序-将历史记录信息转换为脚本变量

windows - 是否存在某些无法在Windows上运行的MAC地址供应商代码,或者我的代码还有其他问题吗?

windows - 如何在 Windows 批处理文件中嵌入文本文件

parsing - 使用 dos cmd 行解析简单的文本文件

linux - 将 SAS Enterprise Guide 提取到 Unix 服务器可运行批处理中?

batch-file - 在命令提示符中使用 aws-adfs 时如何指定用户名/密码

windows - 如何在 Windows 批处理文件中设置命令的工作目录?