2017-07-05 6 views
1

Ich habe Probleme mit einem scheinbar einfachen Skript, das ich im Wesentlichen ein Element vom PC des Benutzers kopiert und auf einem anderen Computer platziert; Der Zieldateipfad enthält jedoch ein Leerzeichen. Ich habe mehrere Methoden versucht, dieses Problem zu beheben (einige verstehe ich nicht vollständig), indem ich doppelte Anführungszeichen um den String verwende, um es zum Ausführen von Powershell zu zwingen.Fehler in der Batch-Datei wegen Speicherplatz

Um einen kurzen Vorlauf zu dieser Situation zu geben, muss ich hinzufügen, dass ich dieses Skript ursprünglich mit Powershell unter Windows 10 erstellt habe und hinzufügen sollte, dass es in Powershell völlig problemlos funktioniert, nur nicht als .bat. Ich verstehe, dass es einige Unterschiede in den Sprachen geben kann oder was durch die Programme interpretiert wird. Hier

ist die Zeichenfolge in der Frage:

Copy-Item $ENV:USERPROFILE\Desktop\VAST.accdb -destination "\\PRECDP19670\C$\Users\WAKE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" -Force -PassThru -Verbose 

Das Ziel enthält den Raum, in dem Dateipfad.

Jede Hilfe wird geschätzt!

+1

'Copy-item' ist ein PowerShell-Befehl, der nur in PowerShell ausgeführt werden kann. –

+1

"Es kann einige Unterschiede in den Sprachen geben" ist eine große Untertreibung. Batch Scripting ist fast, aber nicht ganz im Gegensatz zu PowerShell Scripting. Sie müssen entscheiden, ob Sie PowerShell- oder Batch-Dateien (oder möglicherweise PowerShell * aus * Batch-Dateien) verwenden, bevor diese Frage eine sinnvolle Antwort hat. Der einfachste Weg, PowerShell-Formular-Batchdateien aufzurufen, besteht darin, das Skript in eine eigene '.ps1'-Datei zu laden und' powershell.exe -file script.ps1' aufzurufen. Es ist zwar möglich, Befehle direkt auszuführen, aber Sie stoßen schnell auf Probleme, die z. B. "-EncodedCommand" erfordern. –

+0

@JeroenMostert Danke Mann. Ich habe tatsächlich PowerShell verschrottet und das Skript im Stapelbetrieb erstellt, und es funktioniert großartig. Das Beste von allem, ich dachte, die Arbeit in Batch-Datei wäre schwieriger gewesen, aber es scheint einfacher zu sein, als wenn ich in PowerShell schrieb. Verwendet eine einfache ** xcopy ** und alles ist gut. – zhaque

Antwort

0

Wie von Bill erwähnt, muss Ihre BAT-Datei PowerShell als ausführbare Datei aufrufen.

PowerShell.exe -command 'Copy-Item $ENV:USERPROFILE\Desktop\VAST.accdb -destination "\\PRECDP19670\C$\Users\WAKE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" -Force -PassThru -Verbose 
+0

Lieber double zitieren Sie den gesamten Befehl und escape innere doppelte Anführungszeichen mit einem umgekehrten Schrägstrich '\" 'oder tauschen Sie die inneren Anführungszeichen mit einzelnen. – LotPings

+0

Warum gehen Sie durch all diese Schwierigkeiten, wenn Sie einfach den' Copy-Item' Befehl eingeben können PowerShell Prompt? –

+0

@Bill_Stewart Ich habe über 200+ Maschinen, die ich dieses Skript für jede Maschine in einem Stapel von 30 ausführen muss. Also habe ich diese kleinen Skripte für jede Charge von 30 gemacht. Ich habe nicht wirklich verstanden, wie man das konvertiert PowerShell-Skript in eine exe, die ich einfach ausführen könnte, wenn nötig, also habe ich alles auf eine .bat geschoben, um die Skripte einfach auszuführen. Wenn ich PowerShell verwendet habe, musste ich die Zeichenfolgen dort hinein kopieren und einfügen Jedes Mal, wenn ich den Job ausführen wollte – zhaque

Verwandte Themen