larz
Goto Top

VBS-Datei via Batch erstellen

Hallo zusammen,

ich möchte aus einer Textliste in der pro Zeile ein Druckername enthalten ist jeweils eine vbs-Datei erstellen.
Dazu habe ich folgenden Codeschnipsel:

for /f %%i in (druckerliste.txt) do (
echo Set WshNetwork = CreateObject("WScript.Network")>%%i_auf_PrintServer1.vbs  
echo WshNetwork.AddwindowsPrinterConnection "\\lttps01\%%i">%%i_auf_PrintServer1.vbs  
)

eigentlich erwarte ich eine Datei "HPDrucker123_auf_Printserver1.vbs" mit folgendem Inhalt:

Set WshNetwork = CreateObject("WScript.Network")  
WshNetwork.AddwindowsPrinterConnection "\\PrintServer1\HPDrucker123"   

Aber irgendwie klappt's nicht... help!

Gruß & Danke
Lars

Content-Key: 163756

Url: https://administrator.de/contentid/163756

Printed on: April 20, 2024 at 02:04 o'clock

Mitglied: 86263
86263 Mar 31, 2011 at 16:16:04 (UTC)
Goto Top
Zitat von @Larz:
Aber irgendwie klappt's nicht... help!

Eine überaus gut formulierte Fehlerbeschreibung.

MfG,
DB
Member: Biber
Biber Mar 31, 2011 at 16:28:31 (UTC)
Goto Top
Moin Larz,

wenn du magst, dann würde ich gern das, was du vermutlich für eine Fehlerbeschreibung hältst, in unseren FAQ als Beispiel verwenden.

Du schreibst in dem Script-Schnipsel 2 Zeilen und legst jeweils mit ">" die Zieldatei neu an.

  • Schreib nur eine Zeile
  • oder nur die erste Zeile mit ">"und die Nachfolgezeichen mit ">>"
  • oder setze das ">" hinter die schliessende "FOR /F...DO "-Anweisungsklammer.

Grüße
Biber
Member: Skyemugen
Skyemugen Mar 31, 2011 at 16:44:57 (UTC)
Goto Top
Zitat von @Biber:
  • oder setze das ">" hinter die schliessende "FOR /F...DO "-Anweisungsklammer.
Aloha Biber,
was natürlich zu bevorzugen ist, da die Datei somit nur einmal geöffnet werden muss (mich an Schleife ohne mehrmaliges Öffnen der Datei in welche Umgeleiteitet wird erinner)

btw: müsste
for /f %%i in (druckerliste.txt) do echo Set WshNetwork = CreateObject("WScript.Network"):WshNetwork.AddwindowsPrinterConnection "\\lttps01\%%i">%%i_auf_PrintServer1.vbs
nicht auch funktionieren? (wäre dann nicht zweizeilig, sollte dennoch im vbs abgearbeitet werden, wenn ich mich nicht irre)

greetz André
Member: FunkerVogt
FunkerVogt Mar 31, 2011 at 17:05:41 (UTC)
Goto Top
echo Set WshNetwork = CreateObject("WScript.Network") > HPDrucker123_auf_Printserver1.vbs
echo WshNetwork.AddwindowsPrinterConnection "\\PrintServer1\HPDrucker123" >> HPDrucker123_auf_Printserver1.vbs


meinste so?

Muss es ne Batch Datei sein?
Member: Biber
Biber Mar 31, 2011 at 17:16:53 (UTC)
Goto Top
Zitat von @FunkerVogt:
meinste so?
meinste mich?
Member: FunkerVogt
FunkerVogt Mar 31, 2011 at 17:20:46 (UTC)
Goto Top
Nee, den Larz!

Ganz nebenbei, wenn Du es für die FAQs gebrauchen kannst:

Das ^ ist bei schreiben in Dateien sehr hilfreich! Was da drin steht, wird als Text dort eingetragen!
Ich hatte das Problem schon mal!


Uwe
Member: Biber
Biber Mar 31, 2011 at 17:39:41 (UTC)
Goto Top
Moin Skyemugen,

eigentlich wollte ich Larz gar nix Gabelfertiges servieren.
Der ist ist doch auch nicht erst gestern abend aus irgendeinem Wurmloch auf diesen unseren Planeten gefallen.

Aber da ich mich anscheinend zu westerwellig ausgedrückt habe, jetzt noch mal die Antwort hinter der Antwort.

Ursprungsskript:
for /f %%i in (druckerliste.txt) do ( 
    echo Set WshNetwork = CreateObject("WScript.Network")>%%i_auf_PrintServer1.vbs  
    echo WshNetwork.AddwindowsPrinterConnection "\\lttps01\%%i">%%i_auf_PrintServer1.vbs   
)

  • Schreib nur eine Zeile
for /f %%i in (druckerliste.txt) do ( 
    echo CreateObject("WScript.Network").AddwindowsPrinterConnection "\\lttps01\%%i">%%i_auf_PrintServer1.vbs   
)
  • oder nur die erste Zeile mit ">"und die Nachfolgezeichen mit ">>"
Siehe unten bei FunkerVogt dem Redseligen.

  • oder setze das ">" hinter die schliessende "FOR /F...DO "-Anweisungsklammer.
Siehe bei oben zitiertem Phil-Tipp.

Grüße
Biber
Member: Larz
Larz Mar 31, 2011 at 17:41:55 (UTC)
Goto Top
mea culpa, aber deine Antwort ist mindestens genauso gut formuliert face-big-smile
War etwas im Stress, normalerweise formuliere ich mehr aus... aber ist schon richtig, hätte ich weniger geschludert, wäre meine Anfrage klarer gewesen...

Gruß
Larz
Member: Larz
Larz Mar 31, 2011 at 17:42:08 (UTC)
Goto Top
@Biber
das mit dem zweiten > war ein Tippfehler, in der erstenm Zeile ist es > in der zweiten >>
for /f %%i in (druckerliste.txt) do (
echo Set WshNetwork = CreateObject("WScript.Network")>%%i_auf_PrintServer1.vbs  
echo WshNetwork.AddwindowsPrinterConnection "\\lttps01\%%i">>%%i_auf_PrintServer1.vbs  
)

Mein Problem liegt darin, dass er mit eine Datei "%i_auf_PrintServer1.vbs" mit Inhalt
WshNetwork.AddwindowsPrinterConnection "\\lttps01\%i"

eine Datei "drucker123_auf_PrintServer1.vbs" mit Inhalt
Set WshNetwork = CreateObject("WScript.Network"

sowie eine Datei "drucker345_auf_PrintServer1.vbs" mit Inhalt
Set WshNetwork = CreateObject("WScript.Network"

ausgibt. In der zugrunde liegenden Datei "Druckerliste.txt" stehen die Zeilen
drucker123
drucker345

Kann das jemand nachbauen? Ich denke es liegt an den Sonderzeichen...

Gruß
Larz
Member: Larz
Larz Mar 31, 2011 at 17:51:46 (UTC)
Goto Top
jein - vom Code her ja, aber es soll jeweils eine Datei %%i_auf_Printserver1.vbs erstellt werden.
Batch muss es nicht unbedingt sein. Einfach nur ein Script wo aus einer Liste Druckernamen eben diese vbs-Dateien macht, mit denen man via Doppelklick o.ä. die Drucker wieder verbinden kann...

Gruß
Larz
Member: Larz
Larz Mar 31, 2011 at 17:52:18 (UTC)
Goto Top
Wie wird das ^ verwendet? Wie Anführungszeichen?

Danke
Larz
Member: Biber
Biber Mar 31, 2011 at 17:53:34 (UTC)
Goto Top
Moin Larz,

jetzt (mit noch detailierterer) Fehlerbeschreibung wird es klar - die im VB-Skript enthaltene KlammerZu muss maskiert werden.

POC am CMD-Prompt:
(=19:49:21  D:\temp=)
>for /f %i in ("drucherxy") do @(echo CreateObject("WScript.Network").AddwindowsPrinterConnection "\\lttps01\%i">con)
".AddwindowsPrinterConnection" ist syntaktisch an dieser Stelle nicht verarbeitbar.
## tut nicht


(=19:49:54  D:\temp=)

>for /f %i in ("drucherxy") do @(echo CreateObject("WScript.Network"^).AddwindowsPrinterConnection "\\lttps01\%i">con)
CreateObject("WScript.Network").AddwindowsPrinterConnection "\\lttps01\drucherxy"
##tutet

Grüße
Biber
Member: FunkerVogt
FunkerVogt Mar 31, 2011 at 18:18:00 (UTC)
Goto Top
Yup, genau! Ist besonders bei & also verknüpften Anweisungen zu benutzten!

Wenn Du in einer .vbs ein & per Batch schreiben möchtest, wird das
scheitern, weil ne Batch das & selbst als Kommando interpretiert!

also: ^&^ schreibt & in die .vbs

probier das und es passiert nix:
echo & > test1.vbs

probier das:
echo ^&^ > test1.vbs

Und?
Member: Skyemugen
Skyemugen Mar 31, 2011 at 18:21:26 (UTC)
Goto Top
Zitat von @Larz:
Wie wird das ^ verwendet? Wie Anführungszeichen?

Aloha Larz,

keine Ahnung, wie du jetzt wieder Anführungszeichen definieren würdest, in welchem Zusammenhang - aber das ^ wird zum Escapen von möglichen Befehls- oder Syntaxzeichen verwendet (allerdings nicht immer und bei allen ... % lässt sich in der batch z.B. durch %% escapen [also ein weiteres Prozentzeichen])

greetz André

edit:
Zitat von @FunkerVogt:
probier das:
echo ^&^ > test1.vbs

ein ^ zu viel meiner Meinung nach ;) wenn du so am prompt testest, fragt man dich höchstens, ob noch mehr kommen soll :P
Member: FunkerVogt
FunkerVogt Mar 31, 2011 at 18:31:38 (UTC)
Goto Top
ein ^ zu viel meiner Meinung nach ;) wenn du so am prompt testest, fragt man dich höchstens, ob noch mehr kommen soll :P


Kann gut möglich sein! Ich habs nur mal schnell nebenbei probiert!
Member: bastla
bastla Mar 31, 2011 at 18:38:24 (UTC)
Goto Top
@Skyemugen
ein ^ zu viel meiner Meinung nach ;)
Schließe mich an, wobei es aber gar nicht auffällt, wenn dahinter noch was kommt (was bei "&" ziemlich wahrscheinlich ist), da dann eben zB auch das folgende Leerzeichen escaped wird ...
Wie schon angemerkt, löst sich das "Klammerproblem" von selbst, wenn nur eine Zeile Script benötigt wird - also etwa (siehe auch oben bei Biber)
for /f %%i in (druckerliste.txt) do echo CreateObject("WScript.Network").AddwindowsPrinterConnection "\\lttps01\%%i">"%%i_auf_PrintServer1.vbs"
Wozu es x solcher Scripte braucht, ist dann aber mal wieder eine ganz andere Frage (nur als Anmerkung: auch VBS kann Aufrufparameter verwenden) ...

Grüße
bastla
Member: FunkerVogt
FunkerVogt Mar 31, 2011 at 18:51:45 (UTC)
Goto Top
Jetzt hab ich auch noch was gelernt!

Danke!
Member: bastla
bastla Mar 31, 2011 at 18:52:48 (UTC)
Goto Top
@FunkerVogt
(Auch) Deswegen sind wir doch alle hier ... face-smile

Grüße
bastla
Member: Larz
Larz Mar 31, 2011 at 18:58:52 (UTC)
Goto Top
* oder setze das ">" hinter die schliessende "FOR /F...DO "-Anweisungsklammer.

Prima Idee, danke

Gruß
Larz
Member: Larz
Larz Mar 31, 2011 at 19:00:02 (UTC)
Goto Top
*grrrr* einfach das ^hat gefehlt.... danke Biber
dachte schon nach dem Posting
"eigentlich wollte ich Larz gar nix Gabelfertiges servieren."

Du wärst ein Sadist face-smile

Problem gelöst, danke an alle

Gruß
Larz