У меня есть файл controlfile.txt, в котором в каждой строке есть названия некоторых программ, например, "Microsoft Office" в первой строке, затем "Autodesk AutoCAD" во второй строке, "Adobe Acrobat Reader" в третьей строке и так далее. Мне нужен пакетный скрипт для извлечения каждой строки из этого .txt файла в виде строки (более одного слова в строке) и поиска в Google по каждой строке (имени программного обеспечения) на отдельной вкладке для условий лицензии или 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 ответ1

1

Почему так сложно? Я не вижу необходимости хранить значения в массиве - вы можете просто запустить каждую вкладку Chrome непосредственно в одном простом цикле FOR /F.

@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
)

Причина, по которой ваш код на основе массива потерпел неудачу, заключается в том, что вы забыли использовать CALL в строке START.

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .