Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Perl-Script gibt leere Variable in Datei aus...

Mitglied: l0c4lhost

l0c4lhost (Level 1) - Jetzt verbinden

24.10.2005, aktualisiert 28.10.2005, 7316 Aufrufe, 11 Kommentare

Hi, hab hier ein Script, mit dem ich Mozilla-Profil-Dateien lokal auf einen Server kopieren möchte. Das funktioniert auch soweit super, bloss möcht ich mir zum Schluss noch die Variable $pos in eine Datei schreiben lassen, da ich diese noch später für Mozilla brauche. Eigentlich müsste diese Variable beinhalten, wohin der/die Ordner kopiert werden/wurden, als Beispiel K:\Home\Profiles\User. Stattdessen wird aber nix in die Profiles.ini geschrieben Danke für sämtliche geistreiche Ergüsse!!!

MFG, 127.0.0.1

<font class="code">#! C:\perl\bin\perl.exe -w

use File::Find;
use Win32;

my $user = Win32::LoginName;
my $pos = "";
my $path_home = 'c:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Mozilla/Profiles';
my $path_server_perl = 'K:/Home/Profiles';
my $path_server_win = 'K:\\Home\\Profiles';
my $path_profile;
my $search_var = "bookmarks.html";
my $ini = 'C:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Thunderbird/profiles.ini';

find(\&wanted, ''.$path_server_perl.'');
$pos =~ s/\//\\/g;

if (!(open(OUTFILE, ">>$ini"))) {
print "Datei konnte nicht geöffnet werden.";
}

if (!(open(TEST, "<".$pos."/".$search_var.""))) {
mkdir ($path_server_perl);
system("xcopy \/E \/Y \/V \"".$path_home."\" ".$path_server_win."");
print OUTFILE "Hier die Pfade zum Profil";
}
close TEST;

close OUTFILE;

exit(0);

  1. sub routinen
sub wanted{
$pos = $File::Find::dir if $_ eq "".$search_var."";
return $pos;
}
</font>
Mitglied: Atti58
25.10.2005 um 08:39 Uhr
... wenn Du Zeile 25 änderst in:

print OUTFILE "$pos\n";

wird $pos auch in Deine INI-Datei geschrieben, so ist es jedenfalls bei mr.

Wie programmierst / debuggst Du denn, benutzt Du "PTKDB"? Ich konnet nicht alles nachvollziehen und musste die if(!open(TEST ... - system(... - Anweisungen auskommentieren, denke aber, dass sonst alles richtig ist und eigentlich laufen müsste,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 09:01 Uhr
Hallo,

zunächst einmal: finde ich supi, dass noch jemand Perl für Win32 Aufgaben verwendet. Ich habe das früher auch öfter gemacht, meistens in Verbindung mit perlapp aus dem Perl Development Kit von Activestate.

Aber nun zum Problem.

So wie ich das sehe, schreibst Du doch die Variable $pos nirgendwo rein ?! Die Sub &wanted gibt jedenfalls eine richtig zugewiesene $pos aus, das habe ich getestet.

<font class="code">
if (!(open(OUTFILE, ">>$ini"))) {
print "Datei konnte nicht geöffnet werden.";
}
</font>

Was Du hier machst, heißt doch in etwa: Wenn die Datei/der Handle Outfile nicht geöffnet ist, dann mach... und das macht es auch: Bei mir wird immer ausgegeben: "Datei konnte nicht geöffnet werden"...weil sie es auch nirgendwo wird!

irgendwo müsste ja mal ein: open(OUTFILE,">>"$ini") kommen, mit der die profiles.ini wirklich mal zum Schreiben geöffnet wird...


Hoffe, das hat geholfen!

Gruß,
Tim
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 09:18 Uhr
... na, so ganz stimmt das nicht, dass er die Variable nicht füllt - Du hast wohl die Subroutine übersehen ...

OUTFILE wird ja nur geöffnet, wenn:

my $ini = 'C:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Thunderbird/profiles.ini';

existiert ...

Aber sonst gebe ich Dir Recht, Perl ist auch heute noch unschlagbar gegenüber BATCH-Programmierung - besonders wenn man ein wenig "Pattern-Matching" kann,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 10:23 Uhr
Hi Atti,

hab doch gar nicht gesagt, dass er die Variable nicht füllt:

[ZITAT]
So wie ich das sehe, schreibst Du doch die Variable $pos nirgendwo rein ?! Die Sub &wanted gibt jedenfalls eine richtig zugewiesene $pos aus, das habe ich getestet.
[/ZITAT]



Aber dennoch richtig: die Datei existierte bei mir auch nicht, deshalb waren für meine Umgebungsverhältnisse die Negation des if-Statements ziemlich fatal (mal ganz davon abgesehen, dass auch der ordner "Thinderbird" bei mir nicht existiert). Wenn man nicht davon ausgehen kann, dass die Datei existiert, müsste man das umschreiben und vorher prüfen.

Wenn ich es mir nochmal anschaue, kann ich also Atti nur zustimmen: Das einzige, was in die ini geschrieben wird ist nach dem Code ganz offensichtlich nur "Hier die Pfade zum Profil". Flüchtigkeitsfehler also.


Gruß,
Tim

P.S.: Eine gute Adresse für Perl ist auch http://www.perlboard.de/ . Werde den Link mal hier eintragen, wenn er noch nicht existiert...
Bitte warten ..
Mitglied: l0c4lhost
25.10.2005 um 11:36 Uhr
Hallo,

erstmal danke für die rege Beteiligung an meinem Problem!!!

Wie beim ersten Comment beschrieben, habe ich Zeile 25 in print OUTFILE "$pos \n"; geändert. Beim Script-Ablauf hat sich aber leider nichts geändert. In der Profiles.ini wird durch das \n nur eine Leerzeile eingefügt. Ich habe die Vermutung, dass die Variable $pos leer ist, obwohl eigentlich der Pfad zu dem Profil drinstehen müsste!?
Und so langsam gehen mir die Ideen aus

Danke für die Hilfe!
Bitte warten ..
Mitglied: 11078
25.10.2005 um 11:44 Uhr
Hallo,


ch habe die
Vermutung, dass die Variable
$pos leer ist, obwohl
eigentlich der Pfad zu dem Profil drinstehen
müsste!?
Und so langsam gehen mir die Ideen aus


Wie geschrieben, ich habe das Script mal kurz laufen lassen (heute morgen) und bei mir hat $pos einen Inhalt gehabt; glaube aber erst, nachdem ich folgendes Konstrukt, das mir einfach nicht geläufig war, aufgelöst habe:

<font class="code">
    1. sub routinen
    sub wanted{
    $pos = $File::Find::dir if $_ eq "".$search_var."";
    return $pos;
    }
    </font>

    Dieses if-Statement in der dritten Zeile hab ich nicht wirklich kapiert und konnte mir auch (trotz Ausbleiben einer Fehlermeldung) nicht ganz vorstellen, dass dies so richtig ist. Schreib mal folgendes und sieh nach, ob die Variable dann einen Pfad zurückgibt:

    <font class="code">
      1. sub routinen
      sub wanted{
      $pos = $File::Find::dir;
      return $pos;
      }
      </font>

      Gruß,
      Tim
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 12:03 Uhr
@tim

Sorry, ich habe Dein Post dann wohl falsch verstanden ...

... bei mir hat das Übergeben der $pos-Variable geklappt (mit leicht veränderten Pfaden natürlich) ...

Mein Erster Gedanke beim Lesen Deines Problems war allerdings die "Gültigkeit von Variablen" - normalerweise gelten Variablen, wenn sie nicht global deklariert wurden, in Subroutinen nicht bzw. haben dort einen anderen Wert. Du kannst ja das Konstrukt:

$pos=&wanted;

im Hauptprogramm benutzen, um die Variable zu füllen

Warum beantwortet man nur meine Fragen nie ? Benutzt Du einen Debugger? Mit PTKDB kann man nämlich schön verfolgen, welchen Weg das Programm geht und welche Werte die Variablen haben,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 12:48 Uhr
Hi Ho!


Warum beantwortet man nur meine Fragen nie
? Benutzt Du einen Debugger? Mit PTKDB
kann man nämlich schön verfolgen,
welchen Weg das Programm geht und welche
Werte die Variablen haben,

Den kannte ich noch nicht, sieht aber klasse aus (hab es für den späteren Test mal gebookmarkt)!

Trag den doch mal als Link in diesem Bereich ein!

Gruß,
Tim
Bitte warten ..
Mitglied: l0c4lhost
25.10.2005 um 14:25 Uhr
Oh, sry, die Frage nach dem Debugger/Programm, mit dem ich scripte, hab ich total vergessen. Ich nehme Notepad2. Mit dem kam ich eigentlich bisher immer hin, werd mir aber trotzdem mal PTKDB anschauen.
Den Lösungsvorschlag hab ich jetzt noch nicht ausprobiert, werd ich aber noch machen und euch davon berichten. THX!
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 14:26 Uhr
@Tim

... Link ist vorgeschlagen, jetzt muss Frank Scholl nur noch sehen, ob er ihn verwenden darf,

Gruß

Atti.
Bitte warten ..
Mitglied: r00t
28.10.2005 um 14:55 Uhr
Also ich würde das so lösen

#!/usr/bin/perl -W

use strict;
use warnings;

use File::Find;
use Win32;

  1. vars
my $user = Win32::LoginName;
my $pos = undef; # Immer mit undef initialisieren; ist schoener.
my $path_home = "C:/Dokumente und Einstellungen/$user/Anwendungsdaten/Mozilla/Profiles";

  1. Das hier kann man kuhler machen, man kann den Delimiter bestimmen, frag mich aber nicht, wie das geht.
my $path_server_perl = 'K:/Home/Profiles';
my $path_server_win = 'K:\\Home\\Profiles';

my $path_profile = undef;
my $search_var = "bookmarks.html";
my $ini = "C:/Dokumente und Einstellungen/$user/Anwendungsdaten/Thunderbird/profiles.ini";

find(\&wanted, $path_server_perl);

  1. Das hier koenntest du dir sparen, wenn du das mit dem Delimiter machst.
$pos =~ s/\//\\/g;

  1. Ich drehe hier mal die Reihenfolge...
  2. Hm, ich verstehe hier nicht, was du da machen willst oder machst.
if(! -d $path_server_perl){
mkdir($path_server_perl);
system("xcopy /E /Y /V $path_home $path_server_win");
}
  1. Sollte eigentlich prima gehen. Ich verstehe die ganzen Backslashes nicht.

  1. Hier wuerde ich das einfacher schreiben:
          1. Mit einem Pfeil (>) wuerde die Datei ueberschrieben. Ich denke, das ist, was du brauchst.
          2. Ich weiss es aber nicht so genau.
          3. Mit einem doppeltem Pfeil (>>) waere es ranhaengen.

          1. Und dann glaube ich, dass du hier Sachen doppelmoppelst. Ich mach' mal, wie ich das denke.

                  1. Jedenfalls schreibst du hier gar nichts in die ini rein.
                  2. So in etwa muesste das aussehen:
          open(WRITE_INI, ">$ini") or warn "Could not open file $ini: $!"; # sprechende Fehler Benutzen! ($!)
          print WRITE_INI "$pos/$search_var";
          close WRITE_INI;

          exit(0);

          1. helper apps
        sub wanted(){
        return unless -f $_;
                1. Ich glaube, Find::dir ist hier falsch?
                2. Du willst doch nach bookmarks.html suchen?
        $pos = $File::Find::dir;
        return $pos;
        }
Bitte warten ..
Ähnliche Inhalte
VB for Applications

Wenn bestimmte Datei leer dann Script ausfürhen sonst nicht

gelöst Frage von aletriVB for Applications10 Kommentare

Guten Abend allerseits Dieser Script löscht einen bestimmten Eintrag in der Scener.cfg des Flugsimulators und funktioniert soweit: Nun sollte ...

Perl

Perl script zur Auswertung einer Telefonanlage

gelöst Frage von Fl0wMAGPerl2 Kommentare

Hallo leute, ich bin seit einiger Zeit in der Ausbildung zum Systemintegrator und soll da doch bitte mal in ...

Batch & Shell

Abfrage ob Variable leer ist

gelöst Frage von anmelderBatch & Shell2 Kommentare

Hallo, Wenn ich: eingebe wird ja ausgegeben. Wie lautet die Abfrage für: ? Man bräuchte so etwas wie NOTHING ...

Batch & Shell

Linux bash script: Datei verschieben nur wenn Zielverzeichnis leer

gelöst Frage von ole-objektBatch & Shell2 Kommentare

Hallo! ich steh gerade total auf dem Schlauch: Ich muss in einem Skript viele Dateien in ein bestimmtes Verzeichnis ...

Neue Wissensbeiträge
Exchange Server

Exchange 2010-2019 Sicherheitslücke durch Regkey löschen schließen

Information von sabines vor 10 StundenExchange Server1 Kommentar

Unter ist eine Lücke im Exchange 2010-2019 beschrieben, die durch das Löschen eines reg keys geschlossen werden kann. In ...

Windows Server
Erneutes Release von WS2019 und Win10 v1809
Tipp von IT-Pro vor 1 TagWindows Server3 Kommentare

Hi, nachdem der Windows Server 2019 und Windows 10 in der Version 1809 aufgrund von verschwinden von Dateien nach ...

CPU, RAM, Mainboards
Spectre Update Tool für ältere PCs
Information von sabines vor 1 TagCPU, RAM, Mainboards6 Kommentare

Mit Hilfe eines Tools wird der betreffende PC permanent von einem USB Stick gestartet, der ein passendes Microcode Update ...

Windows 10
Windows 10 Oktober 2018 Update: Es ist wieder da
Tipp von Bowsette vor 1 TagWindows 101 Kommentar

Ein neuer Versuch von Microsoft das Windows 10 Oktober 2018 Update, auch bekannt als 1809, an den Mann zu ...

Heiß diskutierte Inhalte
Java
Testautomatisierung
gelöst Frage von WPFORGEJava15 Kommentare

Hallo, nehmen wir an, es gibt eine Webseite mit einer Karte und einem Suchfeld. Nun wird in das Suchfeld ...

Windows Server
Lohnt sich eine Domäne für uns?
Frage von BowsetteWindows Server15 Kommentare

Hallo, ich arbeite in einem kleinen Unternehmen mit mehr als 5 und weniger als 10 Mitarbeitern, also Small Business ...

Viren und Trojaner
Office365 Trojaner Analyse
Frage von ZeppelinViren und Trojaner12 Kommentare

Liebe Community, ich wende mich an euch, um mehr über den Office365 Trojaner zu erfahren, welcher grade seine Runden ...

Exchange Server
PST Datei enthält weder Betreff noch Absender
gelöst Frage von SSamuelExchange Server10 Kommentare

Hallo zusammen, ich versuche aus einer wiederhergestellten Exchange (SBS2011) .EDB mit dem Programm "Kernel for Exchange von Nucleus" eine ...