2017-03-08 2 views
-1

Ich habe versucht, diesen Beitrag so viel wie möglich zu reduzieren, ohne die Informationen zu vernachlässigen TL; DR im unteren Teil enthalten.Wie man eine Batch-Datei stoppt, die alles ausgibt, was sie in eine Logdatei tut?

ich ein Skript geerbt haben, die, kurz gesagt

  • prüft 2 Ordner auf dem Server A für Bilder und Textdateien
  • kopiert die Textdateien in einen Zielordner auf Server B
  • kopiert das Bild Dateien in ein Bild Zielordner auf Server B
  • Archive, die diese Dateien auf Server A
  • löscht alle Dateien, die älter als 5 Tage auf Server A

hier wird das Skript

@echo on 
set log=c:\temp\acsloadcopy.log 

set txtsrc=C:\Users\LCI\Desktop\txtsrc 
set imgsrc=C:\Users\LCI\Desktop\imgsrc 

set txtdest=C:\Users\LCI\Desktop\txtdest 
set imgdest=C:\Users\LCI\Desktop\imgdest 

set txtbak=%txtsrc%\Archive 
set imgbak=%imgsrc%\Archive 

rem set txtautonomy=\\idolget\tm\%TM10Environment%\ 

if ("%tm10acis%"=="") (
    call :stop 1 "No tmacis environment variable set - can't run" 
) 

if ("%tm10acis%"=="none") (
    call :stop 0 "No Acs server for this environment (tmacis=none)" 
) 

set _hh=%time:~0,2% 
if "%time:~0,1%"==" " set _hh=0%_hh:~1,1% 
SET TIMESTAMP=%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%-%_hh%-%TIME:~3,2%-%TIME:~6,2% 

call :clean 

call :dochecks 
REM call :checkage %txtsrc% 

REM COPY TO ACSE 
xcopy %txtsrc%\*.* %txtdest% 
if ERRORLEVEL 1 call :stop 1 "error copying %txtsrc% %txtdest%" 

xcopy %imgsrc%\*.* %imgdest% 
if ERRORLEVEL 1 call :stop 1 "error copying %imgsrc% %imgdest%" 

REM to ARCHIVE 
move /y %txtsrc%\*.* %txtbak%\%TIMESTAMP% 
rem Xcopy %txtsrc%\*.* %txtbak%\%TIMESTAMP% 
if ERRORLEVEL 1 call :stop 1 "error moving %txtsrc% %txtbak%\%TIMESTAMP%" 

move /y %imgsrc%\*.* %imgbak%\%TIMESTAMP% 
rem Xcopy %imgsrc%\*.* %imgbak%\%TIMESTAMP% 
if ERRORLEVEL 1 call :stop 1 "error moving %imgsrc% %imgbak%\%TIMESTAMP%" 


REM CLEAN UP OLD ARCHIVES 

call :clean %txtbak% 
call :clean %imgbak% 

goto :eof 

:dochecks 
call :checkfolder %txtsrc% 
call :checkfolder %imgsrc% 
call :checkfolder %txtdest% 
call :checkfolder %imgdest% 
call :checkfolder %txtbak% 
call :checkfolder %imgbak% 

if not exist %txtbak%\%TIMESTAMP% mkdir %txtbak%\%TIMESTAMP% 
if ERRORLEVEL 1 call :stop 1 "Can't create archive folder %txtbak%\%TIMESTAMP% " 
if not exist %imgbak%\%TIMESTAMP% mkdir %imgbak%\%TIMESTAMP% 
if ERRORLEVEL 1 call :stop 1 "Can't create archive folder %imgbak%\%TIMESTAMP% " 
if exist %txtdest%\*.txt call :stop 1 "Previouly copied text files have not been processed by acs" 
if exist %imgdest%\*.jpg call :stop 1 "Previouly copied image files have not been processed by acs" 
if not exist %txtsrc%\*.txt call :stop 0 "No source text files" 
if not exist %imgsrc%\*.jpg call :stop 0 "No source image files" 

:skipcheck 
goto :eof 

:checkfolder 
set f=%1 
pushd %f% 
if ERRORLEVEL 1 call :stop "folder %f% does not exist" 
popd 
goto :eof 

:stop 
set exitcode=%1 
set exitmsg=%~2 

echo %exitmsg% 
exit %exitcode% 

Mein Problem ist, dass das Protokoll ALLES ausgibt die Batch-Datei hier tut ist ein Beispiel für einen Teil davon:

C:\Users\LCI\Desktop\testt>if ERRORLEVEL 1 call :stop 1 "error copying 

C:\Users\LCI\Desktop\txtsrc C:\Users\LCI\Desktop\txtdest" 

C:\Users\LCI\Desktop\testt>xcopy C:\Users\LCI\Desktop\imgsrc\*.* C:\Users\LCI\Desktop\imgdest 
C:\Users\LCI\Desktop\imgsrc\dwqd.jpg 
1 File(s) copied 

C:\Users\LCI\Desktop\testt>if ERRORLEVEL 1 call :stop 1 "error copying C:\Users\LCI\Desktop\imgsrc C:\Users\LCI\Desktop\imgdest" 

C:\Users\LCI\Desktop\testt>REM to ARCHIVE 

C:\Users\LCI\Desktop\testt>move /y C:\Users\LCI\Desktop\txtsrc\*.* C:\Users\LCI\Desktop\txtsrc\Archive\2017-03-08-10-34-41 
C:\Users\LCI\Desktop\txtsrc\awd.txt 
C:\Users\LCI\Desktop\txtsrc\dwdw.txt 
C:\Users\LCI\Desktop\txtsrc\wwqwq.txt 
     3 file(s) moved. 

C:\Users\LCI\Desktop\testt>rem Xcopy C:\Users\LCI\Desktop\txtsrc\*.* C:\Users\LCI\Desktop\txtsrc\Archive\2017-03-08-10-34-41 

C:\Users\LCI\Desktop\testt>if ERRORLEVEL 1 call :stop 1 "error moving C:\Users\LCI\Desktop\txtsrc C:\Users\LCI\Desktop\txtsrc\Archive\2017-03-08-10-34-41" 

C:\Users\LCI\Desktop\testt>move /y C:\Users\LCI\Desktop\imgsrc\*.* C:\Users\LCI\Desktop\imgsrc\Archive\2017-03-08-10-34-41 
C:\Users\LCI\Desktop\imgsrc\dwqd.jpg 
     1 file(s) moved. 

C:\Users\LCI\Desktop\testt>rem Xcopy C:\Users\LCI\Desktop\imgsrc\*.* C:\Users\LCI\Desktop\imgsrc\Archive\2017-03-08-10-34-41 

C:\Users\LCI\Desktop\testt>if ERRORLEVEL 1 call :stop 1 "error moving C:\Users\LCI\Desktop\imgsrc C:\Users\LCI\Desktop\imgsrc\Archive\2017-03-08-10-34-41" 

C:\Users\LCI\Desktop\testt>REM to AUTONOMY 

    C:\Users\LCI\Desktop\testt>rem if ERRORLEVEL 1 call :stop 1 "error creating \2017-03-08-10-34-41" 

Dies ist besonders laut, da Es macht einige Julianische Datumsberechnungen (ich habe diese aus dem Skript genommen, das ich aufgestellt habe, um die bereits vorhandene Textwand zu reduzieren!), die Tausende von Zeilen lang sind.

Wie Sie sehen können, gibt es nur jede Zeile aus, die durchlaufen wird, unabhängig davon, ob sie erfolgreich abgeschlossen wurde oder nicht, was die Interpretation zu einem Schmerz macht, wenn etwas schief geht.

Ich will nur das Protokoll angezeigt werden, wenn sie teilweise/erfolgreich abgeschlossen, und/oder wenn es einen Fehler aufgetreten ist (wie oben zu sehen):

C:\Users\LCIAV\Desktop\txtsrc\awd.txt 
C:\Users\LCIAV\Desktop\txtsrc\dwdw.txt 
C:\Users\LCIAV\Desktop\txtsrc\wwqwq.txt 
    3 file(s) moved) 

habe ich versucht, ein Ausgangsrohr Zugabe nur die Zeilen, die mir nützlich sind (xcopy und IF's) innerhalb des Skripts - das hat nichts geändert,

Ich habe versucht, die Datei über eine andere Batch-Datei mit einem Filter piped am Ende, diese Art von gearbeitet, aber war Ich verwandelte mich in Kopfschmerzen, versuchte alles zu erklären, was ich wollte.

ich bei einem lose bin, wie es warum es alles ausgibt und wie es

lösen würde ich schätzen Hilfe zu verstehen, warum es alles ausgibt und wie es zu lösen.

Grüße

TL, - (! Und warum) DR Batch-Datei Protokoll ist extrem laut, es ist die Ausgabe alles, was es nur also tat es vollständig zur Ausgabe nützliche Informationen reduzieren möchten, oder haben es Fehler

+0

Nun, Sie definieren eine Variable an der Spitze des Skripts für einen Protokolldateinamen, aber ich sehe keine einzige Instanz der Umleitung einer Ausgabe in diese Protokolldatei. – Squashman

+0

In der ersten Zeile Ihres Programms stellen Sie 'Echo ein' ein. Dann sind Sie überrascht, dass das Echo an ist? Wenn Sie nicht möchten, dass jeder Befehl echoed wird, setzen Sie "echo off". Das ist nicht überraschend. – abelenky

+0

@abelenky cheers für die Antwort. Ich bin nicht überrascht, dass es an ist. es "aus" nur Ausgaben "Echo ist aus" in das Protokoll – Nighthawkz

Antwort

4

ändern
@echo on 

zu

@echo off 

welcher W schalte das Befehl-Echo aus.

wie Sie sagen, TL; DR.Sie können dann auswählen, ob Sie eine beliebige Zeichenfolge ausgeben möchten, indem Sie echo an eine beliebige Ausgabe senden, indem Sie >nul an die Zeilen-nicht-gewünscht und möglicherweise 2>nul anhängen, um Fehlermeldungen zu unterdrücken.

+0

danke für die Antwort, ich werde ein Spiel über das mit – Nighthawkz

+0

haben danke. Ich konnte dies nutzen, um nur alles auszustellen, was ich brauchte – Nighthawkz

Verwandte Themen