Veröffentlicht am :
Verwaltung EXTERNER_SYSTEMBEFEHL

Extrahieren von Dateimetadaten mittels Systembefehl

Dieser Code ist auch verfügbar auf: English Español Français
Attention : Dieser Code erfordert Administratorrechte.
Das Makro '%getstats' nimmt ein Argument, 'dir_cmd', das den auszuführenden Systembefehl darstellt (z.B. 'dir c:\path\to\file.exe'). Es verwendet 'filename pipe', um die Ausgabe dieses Befehls zu erfassen. Ein DATA-Schritt versucht, die 6. Zeile dieser Ausgabe zu lesen, um das Datum, die Uhrzeit und die Größe der Datei zu extrahieren. Diese Werte werden dann über 'call symput' in den globalen Makrovariablen '_date', '_time' und '_size' gespeichert. Es ist wichtig zu beachten, dass die 'input'-Anweisung ungültige JSON-Pfade als Elemente enthält, was die Datenextraktion erfolglos macht und zu einem Fehler führt. Nach dem Aufruf des Makros werden die globalen Variablen im SAS©-Log angezeigt. Der 'dir'-Befehl ist Windows-spezifisch und sein Ausgabeformat kann variieren, was Anpassungen für andere Betriebssysteme oder Versionen erfordert, und die Robustheit der Analyse hängt stark von der Konsistenz des Ausgabeformats des Systembefehls ab.
Datenanalyse

Type : EXTERNER_SYSTEMBEFEHL


Die verarbeiteten Daten (Datum, Uhrzeit, Dateigröße) stammen aus der Textausgabe eines Systembefehls ('dir c:\windows\notepad.exe'), der über 'filename pipe' ausgeführt wird. Das Format dieser Ausgabe hängt vom Betriebssystem und der konfigurierten Sprache ab, was diese Methode potenziell nicht portabel und anfällig für Parsing-Fehler macht, falls sich das Ausgabeformat des 'dir'-Befehls ändert. Die 'input'-Anweisung im bereitgestellten Code ist fehlerhaft, da sie JSON-Dateipfade als Elemente der Anweisung verwendet, was das korrekte Lesen der Daten in die Variablen 'date', 'time' und 'size' verhindert.

1 Codeblock
MAKRO DEFINITION
Erklärung :
Dieser Block definiert das Makro '%getstats', das ein Argument 'dir_cmd' erwartet (den Systembefehl vom Typ 'dir'). Es verwendet 'filename pipe', um den angegebenen Systembefehl auszuführen und dessen Ausgabe an SAS umzuleiten, und öffnet dann diese Ausgabe zum Lesen über 'infile cmd truncover'. Ein DATA-Schritt wird für die interne Verarbeitung verwendet, ohne ein Dataset zu erstellen. Die 'input #6'-Anweisung versucht, die 6. Zeile der Ausgabe zu lesen. Das Vorhandensein von Zeichenketten wie ' @code_sas_json/...' ist jedoch ein Syntaxfehler in der 'input'-Anweisung und verhindert das korrekte Lesen der Werte von 'date', 'time' und 'size'. Folglich werden die Variablen wahrscheinlich fehlen. Die Funktionen 'call symput' sollen diese Werte (die wahrscheinlich fehlen oder falsch sein werden) in den Makrovariablen '_date', '_time' und '_size' speichern.
Kopiert!
1%macro getstats(dir_cmd) ;
2filename cmd pipe "&dir_cmd" ;
3DATA _null_ ;
4 INFILE cmd truncover ;
5 * This works on windows XP Professional, but on other version you might need to adjust the settings to
6 read the information you want from different positions ;
7 INPUT #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
8 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
9 @code_sas_json/q203.json size comma17. ;
10 * Now write the data to macro variables to be used ;
11 call symput('_date',put(date,date9.)) ;
12 call symput('_time',put(time,time5.)) ;
13 * note we use left justification within formatted field , otherwise number is right justified within field ;
14 call symput('_size',put(size,comma9. -l)) ;
15RUN ;
16%mend getstats ;
2 Codeblock
MAKRO AUFRUF UND ANZEIGE
Erklärung :
Dieser Block deklariert die Makrovariablen '_date', '_time' und '_size' als global, damit sie nach der Ausführung des Makros verwendet werden können. Anschließend ruft er das Makro '%getstats' auf und übergibt ihm den Systembefehl 'dir c:\windows\notepad.exe' als Argument, wodurch die Ausführung des Makrocodes ausgelöst wird. Schließlich versucht die '%put'-Anweisung, die Werte der Makrovariablen 'Date', 'Time' und 'Size' im SAS-Log anzuzeigen. Aufgrund des Parsing-Fehlers in der 'input'-Anweisung innerhalb des Makros ist es sehr wahrscheinlich, dass diese Makrovariablen nicht korrekt definiert werden und der '%put'-Befehl leere Werte oder Fehler anzeigt.
Kopiert!
1%global _date _time _size ;
2%getstats(dir c:\windows
3otepad.exe) ;
4%put Date=&_date Time=&_time Size=&_size ;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.