2017-02-14 2 views
0

Ich habe ein Batch-Skript, um die neuesten Revisionsdateien von einem SVN herunterziehen, die beim Windows-Start (mit lokalen Gruppenrichtlinieneditor konfiguriert) ausgeführt wird. HierBatch-Skript beim Start nicht abgeschlossen

ist der Code für das Skript:

@echo off 

if "%1"=="" (
    set LIBPATH=C:\ALTIUM_WORK\00001_MCHP-CDB\parts\Library 
) else (
    set LIBPATH=%1 
) 

svn cleanup %LIBPATH% 

set DATETIME=%DATE:~4,2%/%DATE:~7,2%/%DATE:~10,4% %TIME:~0,2%:%TIME:~3,2%:%TIME:~6,2% 

echo %DATETIME%>mcl_update.log 
svn up %LIBPATH%>>mcl_update.log 

if ERRORLEVEL 1 goto ERRHANDLER 
Exit 

:ERRHANDLER 
<Insert error message here> 

Wenn ich dieses Skript mit einem Doppelklick auf die .bat, erhalte ich die folgende Ausgabe in mcl_update.log:

02/14/2017 16:13:50 
Updating 'C:\ALTIUM_WORK\00001_MCHP-CDB\parts\Library': 
At revision 5800. 

Diese ist, was ich erwarte, aber wenn das Skript beim Start ausgeführt wird, wird die letzte Zeile weggelassen. Es auffüllt mcl_update.log mit diesem:

02/14/2017 16:16:07 
Updating 'C:\ALTIUM_WORK\00001_MCHP-CDB\parts\Library': 

Die zweite Zeile Teil der Ausgabe von svn ist, so scheint es, wie der Befehl beginnt, aber einfach nie endet. Ich weiß nicht, warum das so ist. Hat jemand irgendwelche Ideen?

Danke!

-Sean

Ein neu entdeckte wenig Info: Nach dem Start, wenn ich versuche, die Protokolldatei zu löschen, die erzeugt wird, von Windows einen Fehler wirft die besagt, dass „Die Aktion kann nicht, weil die Datei abgeschlossen werden ist in cmd.exe geöffnet ".

Ist es möglich, dass dies ein Domain-Problem sein könnte? Die Verbindung zum Netzwerk meines Unternehmens ist noch nicht hergestellt, so dass der Befehl svn gerade hängt?

Antwort

0

Ich vermute, dass die path nicht das ist, was Sie während des Starts erwarten. Vielleicht sollten Sie den Pfad für svn explizit angeben, da der einzige Bericht, den Sie anscheinend protokollieren, eine einfache echo ist, keine Antwort von svn.

+0

'Aktualisieren 'C: \ ALTIUM_WORK \ 00001_MCHP-CDB \ Teile \ Bibliothek':' ist jedoch der erste Teil der 'svn' Ausgabe. Es scheint nie den Befehl zu vervollständigen. Genau wie eine Überprüfung der Gesundheit, habe ich zuerst eine 'CD' zu' svn' Pfad hinzufügen, aber die Ausgabe ist das gleiche. Es sei denn, ich brauche einen expliziten Pfad beim Aufruf von 'svn'. – detroitwilly

+0

Wenn Sie vermuten, dass es sich um ein Timing-Problem handelt, wird möglicherweise ein 'timeout/t 90> nul' vor dem ersten' svn' eingefügt. Ansonsten würde ich nach dem zweiten (problematischen) 'svn' eine' Pause' hinzufügen und die Umleitung entfernen. Ich vermute, dass 'svn' auf Eingabe wartet und möglicherweise auf' stderr' berichtet, so dass die Eingabeaufforderung für die Umleitung nicht auf 'stdout' erscheint. Es ist interessant, dass das erste 'svn' zu vervollständigen scheint. '2> & 1' sollte stderr und stdout in die Datei mit Ihren aktuellen Redirectors umleiten (aber das hilft nicht bei Eingaben, auf die' svn' möglicherweise wartet) – Magoo

0

Also nach der Befolgung @ Magoos Vorschlag der Rohrleitung stderr heraus in die Datei, wurde das Problem klar. Es stellt sich heraus, dass es mit der Benutzerauthentifizierung meines Servers zu tun hat. Da das Skript beim Start ausgeführt wurde (d. H. Bevor ich mich anmeldete), konnte der Befehl svn nicht ausgeführt werden, da die Benutzerauthentifizierung nicht möglich war.

Ich habe die Gruppenrichtlinie geändert, um das Skript bei der Anmeldung zu starten, anstatt zu starten, und alles funktioniert jetzt.

Verwandte Themen