Syntaxfehler in batch Datei

Von dem falschen Anführungszeichen abgesehen - wenn man mit goto movefile die Schleife verlässt, dann wird Code zwischen der Schleife und der Textmarke :movefile übersprungen, also nicht ausgeführt ... aus diesem Grund stand in meinem Beispiel die Textmarke unmittelbar nach der Schleife.

Also den entsprechenden Code nach der Textmarke einfügen.
 
  • Gefällt mir
Reaktionen: Lloydi
Hey alle miteinander,

gut zwei Wochen später melde ich mich mal zurück. Ich bin auf ein neues Problem gestoßen und finde darauf leider keine Lösung. Das Skript funktioniert soweit ganz gut, es tut was es soll aber jetzt habe ich mal den Dateipfad geändert in der das Skript die Dateien herholen soll und bekomme nun lediglich die Meldung dass die Datei nicht gefunden werden kann. Liegt das Problem daran, dass es die Datei nicht aus einem Laufwerk bezieht sondern aus dem Netzwerk? Das Skript soll direkt in das B-NAS Netzwerk, dort die gewünschte Datei auswählen und in ein anderes Netzwerk also wfsaw verchieben. Muss ich iwas am Delims ändern oder wo genau liegt das Problem?

Code:
@Echo off
setlocal enableextensions

pushd c:\test

for /f "delims=" %%g IN ('DIR /b /a-d /od /tw') do (
  set zold=%%g
  set zoldname=%%~ng
  goto movefile
)

:movefile

move "\\B-NAS\Pfad1\Pfad2\Pfad3\%zold%" "\\B-NAS\Pfad1\Pfad2\Pfad3\%zold%.Test1"

timeout /t 3

move /y "\\wfsaw\AWP\Doku\%zold%.Test1" "\\wfsaw\AWP\Doku\%zoldname%.Test2"

popd

pause

exit /b
 
ECHO ist der wichtigste Befehl bei Batch. Schreib ein ECHO vor deine move Kommandos und schau dir an was die Batch aus den Pfaden macht. Dann weißt du auch wo der Fehler liegt und kannst ihn korrigieren.
 
  • Gefällt mir
Reaktionen: Lloydi
Okay ich habe dasProblem gefunden. Das Skript kann die Datei nicht finden, weil Batch keine UNC Pfade unterstützt. Dagegen habe ich jetzt den Befehl "pushd %~dp0" gesetzt.
"Das sorgt dafür, dass immer das Verzeichnis, aus welchem das Script gestartet wurde, als Arbeitsverzeichnis gesetzt wird. Wird das Script aus einem UNC-Pfad heraus gestartet, so mounted dieser Header den UNC-Pfad auf einen freien Laufwerksbuchstaben und setzt diesen als aktuellen Pfad. Hierfür wird der Parameter 0 (der volle Name des aktuellen Skriptes inkl. Pfad) ausgewertet. ~dp sorgt dafür, dass nur der Laufwerksbuchstabe und der Pfad übrig bleiben. Das klappt sogar bei UNC-Pfaden. Nach dem Ende des Skriptes (und dem Schließen des CMD-Fensters) wird die Verbindung automatisch wieder getrennt.

Möchte man die Verbindung mit dem Netzlaufwerk explizit aufheben bzw. das originale Arbeitsverzeichnis wiederherstellen, so genügt ein Aufruf von popd."

Den ersten Netzlaufwerk findet er somit also schonmal, nur nicht den Pfad wohin es verschoben werden soll da dieser ein anderes Netzlaufwerk ist. Wie stelle ich es an, dass die batch Datei auch diesen erkennt?
 
Lloydi schrieb:
Das Skript kann die Datei nicht finden, weil Batch keine UNC Pfade unterstützt.
Das stimmt schlicht und ergreifend nicht.

Nur um sicherzugehen habe ich gerade erfolgreich eine Datei via batch von meiner Festplatte in einen UNC-Pfad gemoved und dann noch ein zweites Mal von einem UNC-Pfad in einen anderen verschoben.

Natürlich muss der Pfad zuvor mit net use gemounted werden - ob mit oder ohne Laufwerksbuchstaben ist irrelevant. Wenn man mittels pushd in einen UNC-Pfad springt, führt Windows implizit ein net use auf eben diesen Pfad aus, mit dem aktuellen Benutzer oder gespeicherten Login-Informationen.
 
Lloydi schrieb:
Das Skript kann die Datei nicht finden, weil Batch keine UNC Pfade unterstützt.
Batch unterschützt schon UNC-Pfade. Man sollte aber die Einschränkungen kennen ...
While most command line utilities do fully support UNC paths, they cannot be set as the current directory. Launching a batch file from a UNC path will implicitly run CMD.exe with that UNC path, this will often return the error: path is an invalid current directory path.
https://ss64.com/nt/cmd.html

Dieses Verhalten hängt zum einen von der verwendeten Windows-Version ab, zum anderen kann es über einen Registry-Eintrag gesteuert werden ...
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
Dort gibt es den Wert DisableUNCCheck
 
Zurück
Oben