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-ID: 163756

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

86263
86263 31.03.2011 um 18:16:04 Uhr
Goto Top
Zitat von @Larz:
Aber irgendwie klappt's nicht... help!

Eine überaus gut formulierte Fehlerbeschreibung.

MfG,
DB
Biber
Biber 31.03.2011 um 18:28:31 Uhr
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
Skyemugen
Skyemugen 31.03.2011 um 18:44:57 Uhr
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é
FunkerVogt
FunkerVogt 31.03.2011 um 19:05:41 Uhr
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?
Biber
Biber 31.03.2011 um 19:16:53 Uhr
Goto Top
Zitat von @FunkerVogt:
meinste so?
meinste mich?
FunkerVogt
FunkerVogt 31.03.2011 um 19:20:46 Uhr
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
Biber
Biber 31.03.2011 um 19:39:41 Uhr
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
Larz
Larz 31.03.2011 um 19:41:55 Uhr
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
Larz
Larz 31.03.2011 um 19:42:08 Uhr
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
Larz
Larz 31.03.2011 um 19:51:46 Uhr
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
Larz
Larz 31.03.2011 um 19:52:18 Uhr
Goto Top
Wie wird das ^ verwendet? Wie Anführungszeichen?

Danke
Larz
Biber
Biber 31.03.2011 um 19:53:34 Uhr
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
FunkerVogt
FunkerVogt 31.03.2011 um 20:18:00 Uhr
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?
Skyemugen
Skyemugen 31.03.2011 um 20:21:26 Uhr
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
FunkerVogt
FunkerVogt 31.03.2011 um 20:31:38 Uhr
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!
bastla
bastla 31.03.2011 um 20:38:24 Uhr
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
FunkerVogt
FunkerVogt 31.03.2011 um 20:51:45 Uhr
Goto Top
Jetzt hab ich auch noch was gelernt!

Danke!
bastla
bastla 31.03.2011 um 20:52:48 Uhr
Goto Top
@FunkerVogt
(Auch) Deswegen sind wir doch alle hier ... face-smile

Grüße
bastla
Larz
Larz 31.03.2011 um 20:58:52 Uhr
Goto Top
* oder setze das ">" hinter die schliessende "FOR /F...DO "-Anweisungsklammer.

Prima Idee, danke

Gruß
Larz
Larz
Larz 31.03.2011 um 21:00:02 Uhr
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