WinFuture-Forum.de: Batch: Existierende Dateien -> Fehlermeldung - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Batch: Existierende Dateien -> Fehlermeldung


#1 Mitglied ist offline   Exelym 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 27. Juni 17
  • Reputation: 0

geschrieben 27. Juni 2017 - 14:14

Guten Tag,


ich benötige einmal eure Hilfe.

Ich habe soeben eine batch datei geschrieben, welche gewisse Dateien von A nach B verschieben und kopieren soll.
WENN eine Datei nicht verschoben werden kann, weil sie z.b. noch geöffnet/in bearbeitung ist, soll das Script eine Fehlermeldung ausspucken.

So sieht es aktuell aus:
//Pfade
set mypath1=%userprofile%\TestQUELLE
set mypath2=%userprofile%\TestZIEL
set mypath3=%userprofile%\TestQUELLE\MOVED

//MOVE&COPY
for %%i in ("%mypath1%\*.tif" "%mypath1%\*.pdf" "%mypath1%\*.xlsx") do move "%%i" "%mypath3%"
for %%i in ("%mypath3%\*.tif" "%mypath3%\*.pdf" "%mypath3%\*.xlsx") do copy "%%i" "%mypath2%"



timeout /t 1
//IF *.tif THEN ERROR
if exist %mypath1%\*.tif goto err1 



//Fehlerausgabe
:err1
cscript //NoLogo error.vbs


In dem .vbs Script ist nur die PopUp Fehlermeldung.

Mein Problem:

Egal ob eine Datei vorhanden ist, oder nicht. Die Fehlermeldung kommt IMMER!
Woran liegt das?

Vielen Dank im Voraus

LG
Exelym
0

Anzeige



#2 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.895
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 27. Juni 2017 - 16:21

MOVE und die allermeisten Kommandozeilenbefehle liefern Fehlercodes zurück (unter Windows ERRORLEVEL genannt).

Standard ist 0 für "kein Fehler".

Allerdings kann MOVE nur überschreiben und zum selben auffordern.

Du müßtest da also anders rangehen. Sinngemäß:


IF NOT EXISTS <PATH\TO\Ziel.tif> THEN (
REM Wenn das Ziel nicht da ist, müssen wir verschieben
MOVE <Quelle.tif> <Ziel.tif>
REM Normal sollte das immer klappen. Falls die Option besteht, das nicht, zB
REM weil das Ziel evtl nicht verfügbar sein könnte...
IF NOT ERRORLEVEL 0 cscript //nologo <path\to\error.vbs>
) ELSE (
REM Hierhin kommt, was passieren soll, wenn das Ziel schon da war => kein Fehler aufgetreten, aber verschoben wurde trotzdem nichts
)



Natürlich könntest Du Dir auch das Scripting.FileSystemObject anschauen (Doku gibts in der MSDN). Damit kannst Du das Gesamtproblem auch in VBS lösen.

Oder Du nimmst PowerShell. Das geht analog C-Sprachen mit Try-Catch:
try
{
# PS kennt eine ErrorAction, welche die Auswirkung von Fehlern auf den Programmfluß steuert. Standard ist Continue wie Fehler melden und weitermachen. Try/Catch fängt aber nur Stop-Fehler. Also muß das als solches festgelegt werden.

move-item -Source QUELL_TIF -Destination ZIEL_TIF -ErrorAction Stop
}
catch
{
# Schreibe Warnmeldung mit dem zurückgegebenen Fehler auf den Bildschirm
Write-Warning -Message $_.Exception.Message
}



Für beide kommt natürlich noch eine Schleife drumrum (für PS wäre das
Get-ChildItem -Path <QUELLE> | 
% {
   # hierhin der Schleifeninhalt 
  }

) und bei PS außerdem noch ein
if($_.Exists)
{
  <#Datei existiert#>
}
else
{
  <#Datei existiert nicht#>
}

.

Dieser Beitrag wurde von RalphS bearbeitet: 27. Juni 2017 - 16:25

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
1

#3 Mitglied ist offline   Exelym 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 27. Juni 17
  • Reputation: 0

geschrieben 28. Juni 2017 - 06:25

Erstmal vielen Dank für die ausführliche Antwort. :)

Ich hätte noch eine Frage zu der Batch-File.

Evtl. muss man den Hintergrund der Aktion noch kurz erläutern.
Es geht darum, dass Scan's manuell(via Script) in einen anderen Ordner verschoben werden sollen, damit ein Programm auf diese zugreifen kann/bzw. diese öffnen kann.

Problem ist: Wir sind auf Sharp umgestiegen und Sharp erstellt bereits eine Datei im Zielordner, bevor der Scan überhaupt durch ist. Vorher war es so, dass das MFG den Scan erstellt und erst anschließend die fertige .tif Datei verschoben hat.

Das Programm kommt damit nicht zurecht und wirft "File not found";"File corrupted" zurück.

Um das zu umgehen soll das Script "fertige" .tif Dateien verschieben. Da es aber durchaus mal vorkommt, dass in dem Moment ein weiterer Scan getätigt wird, welcher dann NICHT verschoben werden soll, bis die Datei abgeschlossen ist.


Ich habe mir zu Nutzen gemacht, dass der MOVE-Befehl einen Error erzeugt, wenn Dateien noch geöffnet/in Bearbeitung sind. Ich habe deinen ersten Vorschlag übernommen, funktioniert soweit auch, nur das ich das ERRORLEVEL nicht auf 1 bekomme, wenn Dateien noch geöffnet/in Bearbeitung sind. Er verschiebt zwar alle bereits fertiggestellte Dateien anstandslos, spuckt aber keinen Fehler aus, wenn Dateien nicht erfolgreich verschoben werden konnten.


Ich muss zugeben, dass ich mich weder in VBS noch in PS ausreichend auskenne um es dort umzusetzen. ;(
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0