【问题标题】:Using CSV variables in a looping batch file在循环批处理文件中使用 CSV 变量
【发布时间】:2021-03-16 00:49:29
【问题描述】:

我有一个 CSV 文件,其中包含该 ftp 中指定文件夹的 IP 地址和 URL 列表。

我正在使用一种工具来处理将它们从一种类型转换为另一种类型并重新加载回源的文件。

整个批处理工作正常,但我需要导入 CSV,然后脚本循环遍历 CSV 中每一行的进程。截至目前,它只使用最后一行信息。

SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=1-2 delims=," %%a in (Convert.csv) do (
    set IPAddress=%%a
    set ProjectURL=%%b
)

ECHO Retrieving File
start /wait tool.exe get "ssh %IPAddress%" "%~dp0%IPAddress%\Backup" "%~dp0%IPAddress%\Report\Backup" --ctrl_path="%ProjectURL%"
ECHO Retrieved
Timeout 2 > NUL
ECHO Please wait as we... Convert file after retrieval
ECHO Converting File
start /wait tool.exe convert "%~dp0%IPAddress%\Backup" "%~dp0%IPAddress%\Converted" "%~dp0%IPAddress%\Report\Conversion" "%~dp0HTML.xml" --cnx="%~dp0CNX.xml"
ECHO Converted
Timeout 2 > NUL
ECHO Please wait as we... Push the file
ECHO Pushing File
start /wait tool.exe put "ssh %IPAddress%" "%~dp0%IPAddress%\Converted" "%~dp0%IPAddress%\Report\Placement" --ctrl_path="%ProjectURL%"
ECHO Completed

我知道这会拉动并显示变量更新,但我需要为以这种方式读取和处理的每一行运行脚本的其余部分。

我尝试在 For /F 循环中包含整个脚本,但它似乎没有等待其中的命令完成。它对 CSV 的每一行进行爆破,因此什么都不做。

批处理中是否有循环机制来执行此操作?

我确实通过将整个代码部分放在循环中并将变量内联更改为!IPAddress!和 !ProjectURL!分别,但看起来很笨拙?有没有更清洁的方法?这是我目前拥有的,它可以工作,但一点也不漂亮。

SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=1-2 delims=," %%a in (Convert.csv) do (
    set IPAddress=%%a
    set ProjectURL=%%b

ECHO Retrieving File
start /wait tool.exe get "ssh !IPAddress!" "%~dp0!IPAddress!\Backup" "%~dp0!IPAddress!\Report\Backup" --ctrl_path="!ProjectURL!"
ECHO Retrieved
Timeout 2 > NUL
ECHO Please wait as we... Convert file after retrieval
ECHO Converting File
start /wait tool.exe convert "%~dp0!IPAddress!\Backup" "%~dp0!IPAddress!\Converted" "%~dp0!IPAddress!\Report\Conversion" "%~dp0HTML.xml" --cnx="%~dp0CNX.xml"
ECHO Converted
Timeout 2 > NUL
ECHO Please wait as we... Push the file
ECHO Pushing File
start /wait tool.exe put "ssh !IPAddress!" "%~dp0!IPAddress!\Converted" "%~dp0!IPAddress!\Report\Placement" --ctrl_path="!ProjectURL!"
ECHO Completed
)

【问题讨论】:

  • 为什么使用start /WAIT 来运行可执行文件?为什么不直接运行tool.exetool.exe 是控制台应用程序吗?

标签: windows csv batch-file cmd


【解决方案1】:
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "tokens=1-2 delims=," %%a in (Convert.csv) do (
 rem   set IPAddress=%%a
 rem   set ProjectURL=%%b

ECHO Retrieving File
start /wait tool.exe get "ssh %%a" "%~dp0%%a\Backup" "%~dp0%%a\Report\Backup" --ctrl_path="%%b"
ECHO Retrieved
Timeout 2 > NUL
ECHO Please wait as we... Convert file after retrieval
ECHO Converting File
start /wait tool.exe convert "%~dp0%%a\Backup" "%~dp0%%a\Converted" "%~dp0%%a\Report\Conversion" "%~dp0HTML.xml" --cnx="%~dp0CNX.xml"
ECHO Converted
Timeout 2 > NUL
ECHO Please wait as we... Push the file
ECHO Pushing File
start /wait tool.exe put "ssh %%a" "%~dp0%%a\Converted" "%~dp0%%a\Report\Placement" --ctrl_path="%%b"
)
ECHO Completed

也就是说,只需在循环中将%IPAddress% 替换为%%a%ProjectURL%%%b%%a%%b 只是字符串,没有神奇的属性,并且在定义 do 操作的括号内的上下文中。

【讨论】:

  • 谢谢 Magoo。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 1970-01-01
相关资源
最近更新 更多