Пакетный скрипт для извлечения каждой строки из файла .txt в виде строки (более одного слова в строке) и поиск в Google каждой строки на отдельной вкладке в Chrome

309
IamAD

У меня есть файл 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  ) 
0
Открывается ли что-нибудь в хроме? У вас есть что-то, что конвертирует пробелы в +? Xen2050 6 лет назад 0
@ Xen2050 У меня есть 4 позиции в controlfile.txt, поэтому, когда я запускаю этот пакетный скрипт, Chrome открывает 4 вкладки и ищет «% array [1]% EULA», «% array [2]% EULA», «% array [3]% EULA ","% array [4]% EULA "соответственно в каждой вкладке. Но я хочу, чтобы chrome искал значение, которое хранится в «% array [1]%» и так далее. IamAD 6 лет назад 0
Вам нужно использовать Delayed Expansion. См. [Enabledelayedexpansion] (http://ss64.com/nt/delayedexpansion.html) - отложенное расширение приведет к тому, что переменные будут расширены во время выполнения, а не во время анализа, а также см. Мой ответ [Windows CMD-скрипт для подсчета файлов и получения имена файлов] (// superuser.com/a/1181398), который показывает, как правильно моделировать массивы в cmd. DavidPostill 6 лет назад 0

1 ответ на вопрос

1
dbenham

Почему так сложно? Я не вижу необходимости хранить значения в массиве - вы можете просто запустить каждую вкладку 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" 

Похожие вопросы