Batch-Skript zum Abrufen jeder Zeile aus einer TXT-Datei als Zeichenfolge (mehr als ein Wort in einer Zeile) und Google-Suche jeder Zeichenfolge in einem separaten Tab in Chrome

369
IamAD

Ich habe eine controlfile.txt-Datei, in der ich in jeder Zeile einige Softwares-Namen habe, z. B. "Microsoft Office" in der ersten Zeile, dann "Autodesk AutoCAD" in der zweiten Zeile, "Adobe Acrobat Reader" in der dritten Zeile usw. Ich brauche ein Batch-Skript, um jede Zeile aus dieser TXT-Datei als Zeichenfolge (mehr als ein Wort in einer Zeile) abzurufen und Google jede Zeichenfolge (Softwarename) in einem separaten Tab nach seinen Lizenzbedingungen oder EULA zu durchsuchen. Ich habe hier den folgenden Code, aber es wird nicht der Wert von array als Abfrage für die Google-Suche übergeben.

@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
Öffnet es etwas in Chrom? Sie haben etwas, das Leerzeichen in + konvertiert? Xen2050 vor 6 Jahren 0
@ Xen2050 Ich habe 4 Positionen in controlfile.txt. Wenn ich dieses Stapelverarbeitungsskript ausführen, öffnet Chrome 4 Registerkarten und sucht nach "% array [1]% EULA", "% array [2]% EULA", "% array" [3]% EULA ","% array [4]% EULA "in jeder Registerkarte. Aber ich möchte, dass Chrome nach dem Wert sucht, der in "% array [1]%" gespeichert ist und so weiter. IamAD vor 6 Jahren 0
Sie müssen die verzögerte Erweiterung verwenden. Siehe [enabledelayedexpansion] (http://ss64.com/nt/delayedexpansion.html) - Verzögerte Erweiterung bewirkt, dass Variablen zur Ausführungszeit und nicht zur Analysezeit erweitert werden. Siehe auch meine Antwort [Windows-CMD-Skript zum Zählen von Dateien und Abrufen Dateinamen] (// superuser.com/a/1181398) zeigt, wie Arrays in cmd korrekt simuliert werden. DavidPostill vor 6 Jahren 0

1 Antwort auf die Frage

1
dbenham

Warum so kompliziert? Ich sehe keine Notwendigkeit, die Werte in einem Array zu speichern - Sie können einfach jede Chrome-Registerkarte direkt in einer einzigen einfachen FOR / F-Schleife starten.

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

Der Grund, warum Ihr Array-basierter Code fehlgeschlagen ist, liegt darin, dass Sie vergessen haben, CALL in Ihrer START-Zeile zu verwenden.

call start "" chrome.exe www.google.com#q=%%array[%%i]%%+EULA 

Ich bevorzuge die verzögerte Erweiterung lieber als den CALL-Trick, da die verzögerte Erweiterung viel schneller ist.

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

Angenommen, keine Ihrer Zeilen beginnt mit :, können Sie die erste Schleife ohne CALL oder DelayedExpansion ausführen

for /f "delims=: tokens=1*" %%A in ('findstr /n "^" "%file%"') do set "array[%%A]=%%B"