Trickreiches Perl-Script braucht errorlevel von MSDOS, tuts aber nicht

Antitrack

Bekanntes Mitglied
Also die Geschichte ist die.... :icon_mrgreen:

Ich habe da (m)ein uraltes Perl-Script, das wollte ich ein bisserl aufpäppeln. Bisher hat es mir einfach nur diverse Unterverzeichnisse entpackt, was ja auch ging -- es sei denn, es gab einen Error.
Daher wollte ich mein Errorhandling etwas verbessern. Daran knabbere ich noch, da es derzeit nicht so funktioniert, wie ich es mir gedacht habe.
Mein letzter Stand der Dinge ist : Mit einer Perl-Zeile wird eine Sub-command.com aufgerufen, wo entpackt wird und die sich normalerweise selber schliessen sollte (den Code habe ich aber gerade rausgetan), falls beim Entpacken alles gut gegangen ist.

foreach $_ (sort (@f5))
{
next if not $_ ;
print "\n subdir unrar: $_ ";
$lockfile=$laufwerk.$slash."mylockfile.tmp";
# @lin1=`del $lockfile` if ($^O =~ /Win/) ;
@lin1=`start cd "$wholepath_dir" ^& $laufwerk ^& unrar x -v -y "$_" ^&^& exit ^& ( Echo ERROR_FAILED 1> $lockfile ) ` if ($^O =~ /Win/) ;
@lin1=`cd "$wholepath_dir"; unrar x -v -y "$_" ` if (not ($^O =~ /Win/)) ;
my $size = -s $lockfile;
print "\n errorcode: $size \n";

Man sieht also , ich mache ein lockfile X:\mylockfile.tmp - dorthin will ich nur den String "ERROR_FAILED" reinschreiben, falls ein Error passierte.
Das klappt leider so irgendwie nicht. Er schreibt mir "ERROR_FAILED" korrekterweise auf den Unter-Bildschirm (die subshell sozusagen :D ) aber nicht ins lockfile. Dies bleibt immer 0 bytes.

Damit die Zeile lesbarer wird :
Er macht mit "start" eine Subshell, diese macht ein "cd x:\depack_dir" & x: & unrar x -v -y dirname && exit & echo "error_failed" > x:\mylockfile.tmp

Was mache ich falsch ?
 

ibinsfei

Team (Technik) - BOFH
Mitarbeiter
Er macht mit "start" eine Subshell, diese macht ein "cd x:\depack_dir" & x: & unrar x -v -y dirname && exit & echo "error_failed" > x:\mylockfile.tmp
Nö. Richtig ist: Er macht mit "start" eine Subshell, diese macht ein "cd x:\depack_dir" & x: & unrar x -v -y dirname && exit & echo "error_failed". Die danach folgende Umleitung gilt für das "start".
 

Antitrack

Bekanntes Mitglied
Ah okay und wie krieg ich die umleitung dazu, innerhalb der "start" Subshell zu funktionieren ?
 

Antitrack

Bekanntes Mitglied
Danke für den Tipp, bin gerade selber draufgekommen :

@lin1=`start cd "$wholepath_dir" ^& $laufwerk ^& unrar x -v -y "$_" ^&^& exit ^& ( Echo ERROR_FAILED ^> $lockfile ^& timeout 3 ^& exit ) ` if ($^O =~ /Win/) ;

funktioniert genau so, wie ich es mir gedacht habe. Der ^ hat gefehlt, es muss ^> $lockfile heissen.
 

Antitrack

Bekanntes Mitglied
Update: Das noch bessere Monster von einer Perl-Zeile gibt in die Temp-Datei sogar die richtige Errorlevel zurück:

$retcode=system("start /wait cmd /V:ON /c cd $wholepath_dir ^& laufwerk ^& unrar x -v -y \"$_\" ^&^& exit ^& echo !ERRORLEVEL! ^> $templockfile ^& timeout 3 ") if ($^O =~ /Win/) ;

Aber scheinbar gibt es keinen Weg, so eine Temp-Datei zu vermeiden. Oder?
 

Antitrack

Bekanntes Mitglied
@DrSnuggles : Ich dachte , das habe ich schon im Eingangsposting klargelegt:
a) In ein Unter-Unterverzeichnis wechseln
b) Dort alle (gern mehrere) Dateien entpacken, die dem Muster *.part001.rar , *.part01.rar , *.part1.rar , oder *.rar entsprechen
c) und, dank der Zeile, beim Entpacken mit "Start ...." eine eigene Subshell aufmachen, in welcher man dem Entpackvorgang live zusehen kann.
 

DrSnuggles

Bekanntes Mitglied
Code:
$unrar='C:\Program Files\WinRAR\unrar.exe'

$rars=dir *.rar -Recurse

foreach ($rar in $rars)
{
    $rar.FullName
    $p=Start-Process -FilePath $unrar -Wait -WorkingDirectory $rar.directoryname -ArgumentList ('x','-v','-y',('"'+$rar.name+'"')) -PassThru -RedirectStandardError ($rar.name+"_error.txt")
    $p.ExitCode
}
 
Zuletzt bearbeitet:

Antitrack

Bekanntes Mitglied
Oh! Powershell! [...hab ich noch nicht auf der alten Win7-Kiste... :icon_mrgreen: ] Hübsch! Macht der auch so schön ein weiteres Fenster pro zu depackendem Dateisatz auf, in welchem man dem Unrar-Prozess live zusehen kann ?
 

DrSnuggles

Bekanntes Mitglied
Oh! Powershell! [...hab ich noch nicht auf der alten Win7-Kiste... :icon_mrgreen: ] Hübsch! Macht der auch so schön ein weiteres Fenster pro zu depackendem Dateisatz auf, in welchem man dem Unrar-Prozess live zusehen kann ?
Ja,
PS gibt's auch für Windows 7, wobei du dringend updaten solltest
 
Zuletzt bearbeitet:
Oben Unten