Wie kann ich Unterordner auslesen lassen und als echo ausgeben?
Hallo Leute, wieder bin ich auf eure Hilfe angewiesen.
Vorwort: Ich möchte in meiner Batch Datei das so Programmieren, das alle Unterordner vom Namen ausgelesen werden und als echo in meiner Batch Datei wiedergegeben werden können.
Also ich baue eine Backup Datei, in der am Anfang eine Abfrage kommt, welche Benutzer alles gesichert werden sollen, dafür sollen alle Benutzer, die sich am PC angemeldet haben ausgegeben werden.
Das habe ich mir so gedacht, dass alle Unterordner von "%userprofile%\.." als echo ausgegeben werden und man dann einen namen davon eintragen kann.
Doch weiss ich nicht, wie ich das hinbekomme, dass meine Batch die Unterordner auflisten kann.
Was dann als Zusatz noch sehr schön wäre ist, wenn dann nur die Benutzer ausgegeben werden, die seid 60 Tagen nicht mehr angemeldet wurden.
Wenn ihr mir damit weiterhelfen könnt, bin ich euch sehr dankbar.
Liebe Grüße Jeeroy
Vorwort: Ich möchte in meiner Batch Datei das so Programmieren, das alle Unterordner vom Namen ausgelesen werden und als echo in meiner Batch Datei wiedergegeben werden können.
Also ich baue eine Backup Datei, in der am Anfang eine Abfrage kommt, welche Benutzer alles gesichert werden sollen, dafür sollen alle Benutzer, die sich am PC angemeldet haben ausgegeben werden.
Das habe ich mir so gedacht, dass alle Unterordner von "%userprofile%\.." als echo ausgegeben werden und man dann einen namen davon eintragen kann.
Doch weiss ich nicht, wie ich das hinbekomme, dass meine Batch die Unterordner auflisten kann.
Was dann als Zusatz noch sehr schön wäre ist, wenn dann nur die Benutzer ausgegeben werden, die seid 60 Tagen nicht mehr angemeldet wurden.
Wenn ihr mir damit weiterhelfen könnt, bin ich euch sehr dankbar.
Liebe Grüße Jeeroy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 163543
Url: https://administrator.de/contentid/163543
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Aloha,
du möchtest also nicht alle Unterordner von %userprofile% ausgegeben bekommen, sondern alle Unterordner eine Ebene höher (alle Profilordner) oder sehe ich das falsch? Die Unterordner von %userprofile% wären ja z.B. Desktop, Eigene Dateien etc.
Also bei Win XP z.B. oder sehe ich das falsch? (glaube bei Vista & Win 7 wäre das sogar direkt %profilesfolder%)
Hm, du möchtest also dort nur die Ordner angezeigt bekommen, von den Benutzern, die seit 60 Tagen nicht mehr angemeldet wurden, hm ergo das Änderungsdatum des Ordners auslesen (sollte ja immer aktualisiert werden, sonst müsste man das Änderungsdatum der ntuser.dat.LOG eine Ebene drunter jeweils auslesen.)
Sehe ich das richtig?
greetz André
du möchtest also nicht alle Unterordner von %userprofile% ausgegeben bekommen, sondern alle Unterordner eine Ebene höher (alle Profilordner) oder sehe ich das falsch? Die Unterordner von %userprofile% wären ja z.B. Desktop, Eigene Dateien etc.
Also bei Win XP z.B.
dir /ad /b "C:\Dokumente und Einstellungen"
Hm, du möchtest also dort nur die Ordner angezeigt bekommen, von den Benutzern, die seit 60 Tagen nicht mehr angemeldet wurden, hm ergo das Änderungsdatum des Ordners auslesen (sollte ja immer aktualisiert werden, sonst müsste man das Änderungsdatum der ntuser.dat.LOG eine Ebene drunter jeweils auslesen.)
Sehe ich das richtig?
greetz André
Hallo Jeeroy!
Das Auflisten der Unterordner lässt sich per
bewerkstelligen.
Das Datum der letzten Anmeldung kannst Du etwa so herausfinden:
Und dann noch für den Vergleichswert (60 Tage vor heute): Batch soll Verzeichnisse und Dateien löschen die älter als 3 Tage UND leer sind
Grüße
bastla
[Edit] Manchmal brauch' ich lang, dann wieder länger - aber irgendwann stehen dann alle Prozentzeichen dort, wo sie gebraucht werden ... [/Edit]
[Edit2] @Skyemugen
[/Edit2]
Das Auflisten der Unterordner lässt sich per
for /f %%i in ('dir "%userprofile%\.." /b /ad') do echo "%%i"
Das Datum der letzten Anmeldung kannst Du etwa so herausfinden:
for /f "tokens=3-5 delims=/ " %%i in ('net user Benutzername^|findstr "Anmeldung"') do set "Jahr=%%k" & set "Tag=%%j" & set "Monat=0%%i"
set "Zuletzt=%Jahr%%Monat:~-2%%Tag%"
Grüße
bastla
[Edit] Manchmal brauch' ich lang, dann wieder länger - aber irgendwann stehen dann alle Prozentzeichen dort, wo sie gebraucht werden ... [/Edit]
[Edit2] @Skyemugen
@bastla, ich wunderte mich schon über %k & Co. KG ^_^
Das kommt davon, wenn ich mal (natürlich direkt in der CMD-Shell) teste ...[/Edit2]
Aloha,
editiert und so, irgendwie heute nur mit dem halben Kopf aktiv
Ach, schon gewundert ... also dann Änderungsdatum innerhalb 60 Tage.
Hm, also: Es lässt sich alles machen.
greetz André
edit: ... nevermind, der bastla flog ja schon vorbei -
edit²: Augen auf, ... %userprofile%\.. stand ja schon so da *pfeif* wieder mal nur halb hingeguckt
edit @bastla, ich wunderte mich schon über %k & Co. KG ^_^
editiert und so, irgendwie heute nur mit dem halben Kopf aktiv
Ach, schon gewundert ... also dann Änderungsdatum innerhalb 60 Tage.
Hm, also: Es lässt sich alles machen.
greetz André
edit: ... nevermind, der bastla flog ja schon vorbei -
net user Benutzername
(!) natürlich ... da steht ja auch der Käseedit²: Augen auf, ... %userprofile%\.. stand ja schon so da *pfeif* wieder mal nur halb hingeguckt
edit @bastla, ich wunderte mich schon über %k & Co. KG ^_^
Aloha,
momentan hätte ich es wortwörtlich so umgesetzt (wahrscheinlich geht es mal wieder Welten einfacher):
Müsste man also nur noch eventuell wenn gewollt die Ausgabe des
edit: ach damn wieder halb gekleistert, halb was anderes gemacht und bastlas edit mit dem link übersehen der Stand da vorhin noch nicht ... wieder mal kein Lerneffekt und do-it-yourself ja, manchmal hab ich das Kommentar-verfassen-Fenster auch mal über eine Stunde offen xD
edit@bastla Ich war mir diesbezüglich nicht sicher, darum habe ich
greetz André
momentan hätte ich es wortwörtlich so umgesetzt (wahrscheinlich geht es mal wieder Welten einfacher):
@echo off & setlocal enabledelayedexpansion
set "G=%temp%\daysago.vbs"
set /a Tage=60
>%G% echo wscript.echo DateAdd("d",-%Tage%,Date)
for /f "tokens=1-3 delims=." %%b in ('cscript //nologo %G%') do set /a "sollDatum=%%d%%c%%b"
for /f %%p in ('dir "%userprofile%\.." /b /ad') do echo "%%p"
set /p "Benutzer="Bitte gebe deinen Benutzer ein: ""
for /f "tokens=3-5 delims=/ " %%i in ('net user %Benutzer%^|findstr "Anmeldung"') do set "Jahr=%%k" & set "Tag=%%j" & set "Monat=0%%i"
set /a "Zuletzt=%Jahr%%Monat:~-2%%Tag%"
if %Zuletzt% GTR %sollDatum% (goto :machwas) else (echo war zu lange inaktiv && goto :eof)
del %G%
:machwas
echo copy irgendwas irgendwohin
pause
Müsste man also nur noch eventuell wenn gewollt die Ausgabe des
dir
als Eingabe für den Benutzer (eben in loop-Abarbeitung oder so) umsetzen - aber bei mir ist gerade Magen leer => brain.exe auf standby => gleich Mittagspause ;)edit: ach damn wieder halb gekleistert, halb was anderes gemacht und bastlas edit mit dem link übersehen der Stand da vorhin noch nicht ... wieder mal kein Lerneffekt und do-it-yourself ja, manchmal hab ich das Kommentar-verfassen-Fenster auch mal über eine Stunde offen xD
edit@bastla Ich war mir diesbezüglich nicht sicher, darum habe ich
set /a
sicherheitshalber gesetztgreetz André
Hallo Jeeroy!
Ist etwas knifflig, weil die Monatszahl ohne führende Null geliefert wird - daher sähe die Kombination etwa so aus:
Wenn Du jetzt noch das Vergleichsdatum %VglDatum% dynamisch haben willst, schaffst Du das mit dem Link von oben hoffentlich selbst [Edit] es sei denn Skyemugen konterkariert meine edukativen Bestrebungen [/Edit] ...
Grüße
bastla
[Edit] @Skyemugen: Ein "set /a" ist hier eigentlich nicht erforderlich, da die Datumswerte auch als String verglichen werden können ... [/Edit]
Ist etwas knifflig, weil die Monatszahl ohne führende Null geliefert wird - daher sähe die Kombination etwa so aus:
@echo on & setlocal enabledelayedexpansion
set "VglDatum=20110129"
for /f %%i in ('dir "%userprofile%\.." /b /ad') do (
for /f "tokens=3-5 delims=/ " %%a in ('net user "%%i"^|findstr "Anmeldung"') do set "Jahr=%%c" & set "Tag=%%b" & set "Monat=0%%a"
set "Zuletzt=!Jahr!!Monat:~-2!!Tag!"
if !Zuletzt! geq %VglDatum% echo %%i
)
Grüße
bastla
[Edit] @Skyemugen: Ein "set /a" ist hier eigentlich nicht erforderlich, da die Datumswerte auch als String verglichen werden können ... [/Edit]
Moin Jeeroy,
Okay, das war vor 8 Stunden...
Zum Vergleich: Es gibt Frauen, die bekommen in diesem Zeitraum Fünflinge und schaffen dennoch einen kleinen Friseurbesuch.
Hast du dir irgendeinen widerspenstigen %userprofile%-Pfad ins Auge gerammt oder WTF dauert am Testen so lang?
und kein noch so voller Kühlschrank kann ihn trösten...
Denn er hat dir schon lange vor deiner sich abzeichnenden Nachfrage geschrieben
Also kurz gefragt.
Bekommst du den Kram jetzt zum Fliegen und machst du dann selbsttätig und zeitnah ein frühlingsgrünes Victoryzeichen an diesen Beitrag ?
- oder -
Möchtest du ein Geschenkpaketchen geschnürt bekommen?
Grüße
Biber
Okay, das war vor 8 Stunden...
Zum Vergleich: Es gibt Frauen, die bekommen in diesem Zeitraum Fünflinge und schaffen dennoch einen kleinen Friseurbesuch.
Hast du dir irgendeinen widerspenstigen %userprofile%-Pfad ins Auge gerammt oder WTF dauert am Testen so lang?
@bastla, kann ich nicht anstadt ein VglDatum auch eine Dauer von 60 Tagen eintragen, ...
Ich springe mal für bastla ein, denn der sitzt sicherlich schon seit den erwähnten 8 Stunden bitterlich weinend zu Hausund kein noch so voller Kühlschrank kann ihn trösten...
Denn er hat dir schon lange vor deiner sich abzeichnenden Nachfrage geschrieben
Zitat von @bastla:
Hallo Jeeroy!
Wenn Du jetzt noch das Vergleichsdatum %VglDatum% dynamisch haben willst, schaffst Du das mit dem Link von oben hoffentlich selbst..
Hallo Jeeroy!
Wenn Du jetzt noch das Vergleichsdatum %VglDatum% dynamisch haben willst, schaffst Du das mit dem Link von oben hoffentlich selbst..
Also kurz gefragt.
Bekommst du den Kram jetzt zum Fliegen und machst du dann selbsttätig und zeitnah ein frühlingsgrünes Victoryzeichen an diesen Beitrag ?
- oder -
Möchtest du ein Geschenkpaketchen geschnürt bekommen?
Grüße
Biber