我有一个 controlfile.txt 文件,其中每一行都包含一些软件名称,例如第一行是“Microsoft Office”,第二行是“Autodesk AutoCAD”,第三行是“Adobe Acrobat Reader”,等等。我需要一个批处理脚本来从该 .txt 文件中获取每一行作为字符串(一行中有多个单词),然后在单独的选项卡中搜索每个字符串(软件名称)以查找其许可条款或 EULA。我有以下代码,但它没有将数组的值作为查询传递给 google 搜索。
@echo off
set "file=C:\New folder\controlfile.txt"
set /A i=0
for /F "usebackq delims=" %%a in ("%file%") do (
set /A i+=1
call set array[%%i%%]=%%a
call set n=%%i%%
)
for /L %%i in (1,1,%n%) do (
call echo %%array[%%i]%%
start "" chrome.exe www.google.com#q=%%array[%%i]%%+EULA
)
答案1
为什么这么复杂?我认为没有必要将值存储在数组中 - 您可以直接在一个简单的 FOR /F 循环中启动每个 chrome 选项卡。
@echo off
for /f "usebackq delims=" %%A in ("C:\New folder\controlfile.txt") do (
echo %%~A
start "" chrome.exe www.google.com#q="%%~A"+EULA
)
基于数组的代码失败的原因是您忘记在 START 行中使用 CALL。
call start "" chrome.exe www.google.com#q=%%array[%%i]%%+EULA
我更喜欢使用延迟扩展而不是 CALL 技巧,因为延迟扩展更快。
@echo off
setlocal enableDelayedExpansion
set "file=C:\New folder\controlfile.txt"
set /a i=0
for /F "usebackq delims=" %%A in ("%file%") do (
set /a i+=1
set "array[!i!]=%%A"
)
for /L %%A in (1,1,%i%) do (
echo !array[%%A]!
start "" chrome.exe www.google.com#q=!array[%%A]!+EULA
)
假设您的行均不以 开头:
,则可以执行第一个循环而无需 CALL 或 DelayedExpansion
for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "%file%"') do set "array[%%A]=%%B"