45753
Goto Top

Vorletzte Zeile aus Textdatei auslesen Zeilenanzahl ist nicht konstant Inhalt ist unbekannt

Hallo,

Ich habe zu einem Problem einfach keine Lösung im Web finden können...

Ich möchte die Anzahl aller gefundener Desktop.ini's aus allen Ordnern + Unterordnern in eine Variable legen können. Dieser Link hat mir zwar schon weitergeholfen...
EINE Zeile aus TXT-Datei auslesen
aber nun habe ich das Problem, dass in ALLINONEB.txt statt die gelöschten Zahl, nun folgender Text steht: "ECHO ist ausgeschaltet (OFF). Ich habe gelesen, dass das Problem wohl an der verlorenen Variablen liegt...
Ich brauche den Wert der Anzahl der Desktop.ini's in der letzten Zeile, da ich sonst nicht weis, wie ich diese Zahl auslesen könnte.
Wenn es generell eine bessere Lösung für mein Problem gibt, dann bitte nur raus damit. Wenn ich mir nämlich meine Batch ansehe, dann bekomme ich ein bischen das Kopfschütteln....

@echo off

for /f %%i in ('dir /A HS /S "Desktop.ini"') do echo %%i >> "ALLINONEA.txt"

echo.
:: Letzte Zeile in %VarA% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarA=%%i
Echo Letzte Zeile...: [%VarA%]
echo.

echo.
for /f "delims=0" %%j in (ALLINONEA.txt) do echo %%j >> "ALLINONEB.txt"

echo.
:: Letzte Zeile in %VarB% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarB=%%i
Echo Letzte Zeile...: [%VarB%]
echo.

pause

Content-Key: 54946

Url: https://administrator.de/contentid/54946

Printed on: April 25, 2024 at 06:04 o'clock

Mitglied: 45426
45426 Mar 24, 2007 at 13:43:33 (UTC)
Goto Top
set lw=%systemdrive%
dir %lw%\Desktop.ini /a /s /B > irgendwas.txt 

Und dann zählst du einfach die Zeilen der irgendwas.txt
Member: bastla
bastla Mar 24, 2007 at 13:55:56 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Wenn Du Deine etwas abenteuerliche Fassung beibehalten willst, müsstest Du nur
for /f %%i in ('dir /A HS /S "Desktop.ini" ^| findstr /v "Verzeichnis(se)"') do echo %%i >> "ALLINONEA.txt"  
schreiben, um die Anzahl in der letzten Zeile zu erhalten.

Etwas abgekürzt wäre (direkt von der Commandline):
for /f %i in ('dir /s /ahs desktop.ini ^| findstr /v "Verzeichnis(se)"') do @set Anzahl=%i  
echo %Anzahl%

Grüße
bastla
Member: paulepank
paulepank Mar 24, 2007 at 13:56:31 (UTC)
Goto Top
Hallo,

einfach so:
for /f %%i in ('dir /a /s /b desktop.ini^|find /c /i "desktop.ini"') do @set anzahl=%%i  
Member: bastla
bastla Mar 24, 2007 at 14:08:22 (UTC)
Goto Top
Hallo paulepank und willkommen im Forum!

Schöne Lösung. face-smile

Grüße
bastla
Member: paulepank
paulepank Mar 24, 2007 at 14:11:01 (UTC)
Goto Top
Danke sehr face-smile
Mitglied: 45753
45753 Mar 24, 2007 at 15:52:37 (UTC)
Goto Top
Danke für eure schnelle Hilfe!

Jetzt ist da noch das Problem mit dem Punkt "Verzeichnis(se)". Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?
Member: bastla
bastla Mar 24, 2007 at 16:07:43 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?
Sorry - die Fragestellung ist mir nicht klar. Wofür soll ein Verzeichnis genommen werden?
Vielleicht noch zur Klarstellung: "Verzeichnis(se)" in meinem Ansatz oben hat die Aufgabe, die störende letzte Zeile der "dir"-Ausgabe zu eliminieren.

Grüße
bastla
Mitglied: 45426
45426 Mar 24, 2007 at 16:19:37 (UTC)
Goto Top
@45753
>Gibt es eine Möglichkeit der Batch beizubringen, automatisch das Verzeichnis zu nehmen in dem die Batch ausgeführt wurde?

Gibt es. Bau die Zeilen ein:

set lw=%~f0
set lw=%lw:~0,3%

Den Rest musst du allein herausfinden. Etwas sollst du ja dabei lernen, und nicht alles vorgekaut bekommen. face-wink

edit: 2 Buchstaben angefügt. face-big-smile
Damit wird das Laufwerk, von dem die Batch gestartet wird durchsucht.
Member: bastla
bastla Mar 24, 2007 at 16:30:27 (UTC)
Goto Top
@45426

Vielleicht wäre ihm im Fall des Falles mit
set lw="%cd%"  
mehr geholfen.

Anmerkung: Die Anführungszeichen sollten eigentlich im "dir"-Befehl stehen.

Grüße
bastla

[Edit] Anmerkung hinzugefügt. [/Edit]
Member: paulepank
paulepank Mar 24, 2007 at 16:31:55 (UTC)
Goto Top
Gibt es eine Möglichkeit der Batch beizubringen,
automatisch das Verzeichnis zu nehmen in dem
die Batch ausgeführt wurde?

genau diese Lösung habe ich dir doch in dem Einzeiler geschrieben.

Grüße
paulepank
Mitglied: 45426
45426 Mar 24, 2007 at 16:35:00 (UTC)
Goto Top
@bastla

Nicht ganz, jedenfalls nicht ohne Anpassung. Aber ich habe den Post berichtigt, so sollte das funktionieren.

edit: Natürlich hast du Recht. Ich bin aber erst durch den Nachfolgepost von paulepank darauf gekommen. ;)

Ich hatte das als "Laufwerk, von dem die Batch gestartet wird" interpretiert.
Member: bastla
bastla Mar 24, 2007 at 16:49:08 (UTC)
Goto Top
@45426

Meine Überlegung ging eigentlich in die Richtung, dass er vielleicht einen Aufruf folgender Art produzieren würde:
D:\Test>C:\Scripts\CountDesktopInis.bat
Dann wäre anstatt meiner "cd"-Krücke das gänzliche Weglassen des "dir"-Zieles (wie er es in seinem Entwurf ja selbst schon gemacht hatte) oder eine vernünftige Parameterübergabe am sinnvollsten.

Grüße
bastla

[Edit] Mein Kommentar hat sich inzwischen wohl erledigt. face-wink [/Edit]
[Edit2] Mir war allerdings, wie man oben sieht, auch nicht gleich klar, was eigentlich gemeint wäre. [/Edit2]
Mitglied: 45426
45426 Mar 24, 2007 at 16:54:20 (UTC)
Goto Top
> eine vernünftige Parameterübergabe am sinnvollsten
Genau! face-big-smile

Dann könnte man den Batch z. B. nach Senden an schieben.
Mitglied: 45753
45753 Mar 24, 2007 at 19:50:03 (UTC)
Goto Top
ok... die Idee mit dem Sendto sagt mir, dass ihr mein Anliegen verstanden habt... Nur blicke ich jetzt ueberhaupt nicht mehr durch. Ich habe die letzte Nacht wegen dieses Problems durchgemacht und bin nun total platt. Wenn ihr tatsaechlich eine Loesung gefunden habt, die also so aussieht, dass die Batch wenn man sie ausfuehr sofort in dem Verzeichnis gestartet wird in dem man sich gerade befindet, dann waere es toll, wenn ihr die komplette batch fuer "platte" leute posten koenntet face-wink mein momentaner Stand ist also dieser:

[code]
@echo off

for /f %%i in ('dir /A /S "Desktop.ini" ^| findstr /v "Verzeichnis(se)"') do echo %%i >> "ALLINONEA.txt"

echo.
:: Letzte Zeile in %VarA% speichern
for /F "Tokens=*" %%i in (ALLINONEA.txt) do Set VarA=%%i
Echo Letzte Zeile...: [%VarA%]
echo.

pause
[code]

Danke nochmal für eure Mühe !
Mitglied: 45426
45426 Mar 24, 2007 at 20:01:01 (UTC)
Goto Top
Lies dir die ganzen Beiträge nochmal durch, da gibt es einfachere Lösungen.

Es nutzt dir doch wenig, wenn du die fertige Lösung präsentiert bekommst, hier gibt es doch schon verschiedene Lösungsansätze. Wenn du versuchst, die mal nachzuvollziehen, kommst du auch selbst dahinter.

Beschäftige dich doch in der Windows-Hilfe mal mit dem Thema "Batch" und den ganzen Unterseiten. Dort steht doch im Prinzip alles, was du wissen musst. face-wink
Mitglied: 45753
45753 Mar 24, 2007 at 20:24:54 (UTC)
Goto Top
Hallo haenschenpiepdochmal

Ich finde es auch nicht richtig, dass man einem immer alles vorbetet ohne das derjenige seinen kopf dazu irgendwie einsetzen braucht. nur habe ich wirklich keinen nerv mehr und mein name den ich mir gegeben habe ist nun mal echt programm. ich haette es mir im grunde genommen garnicht erlauben dürfe die nacht wegen dieses problems um die ohren zu hauen. Es waere also nett, wenn ihr mir nun doch die loesung praesentieren koenntet... Ansonsten MUSS ich das thema fur mich tatsaechlich aus meinem kopf streichen... face-sad ...nur waere das schade nachdem ich an den anderen Batch-dateien die noch dazugehören ich so lange gesässen habe...
Member: bastla
bastla Mar 24, 2007 at 20:38:40 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Damit Du ins Bett kommst: face-wink
@echo off & setlocal
if [%1] neq  cd /d %1 2>nul || cd /d "%~dp1"  
for /f %%i in ('dir desktop.ini /a /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahl=%%i  
if not defined anzahl set anzahl=0
echo %anzahl% desktop.ini unterhalb von %cd%
echo.
pause
Ausgehend von paulepanks Lösung habe ich das Ganze etwas erweitert, sodass Du die Batchdatei tatsächlich in den Ordner "SendTo" legen kannst und sowohl von einer Datei als auch von einem Ordner aus mit "Senden an" aufrufen kannst.

Falls Du eine Auswertung für ein Rootverzeichnis (also etwa "D:\") benötigst, markiere einfach eine Datei und rufe den Batch von dieser aus auf.

Du kannst den Batch auch von der Commandline verwenden (mit Übergabe eines Pfades oder auch ohne Parameter - dann wird ausgehend vom aktuellen Verzeichnis gezählt).

Grüße
bastla
Mitglied: 45426
45426 Mar 24, 2007 at 20:52:01 (UTC)
Goto Top
Die Zeile, die paulepank um 14.56:31 geschrieben hat, einfach um %1\ erweitert, ergibt (mit Beiwerk):

@echo off
for /f %%i in ('dir /a /s /b %1\desktop.ini^|find /c /i "desktop.ini"') do @set anzahl=%%i  
@echo %anzahl% gefundene Dateien Desktop.ini im Pfad %1
pause

Das geht allerdings wegen "\\" in die Hose, wenn du das direkt aus dem Root-Verzeichnis aufrufst.
Aber wenigstens etwas soll für dich noch übrig bleiben. face-wink

Die Zeilen speicherst du dann als irgendwas.bat im SendTo-Ordner deines Profils.
Member: bastla
bastla Mar 24, 2007 at 21:00:29 (UTC)
Goto Top
@45426

Das geht allerdings wegen "\\" in die Hose, wenn du das direkt aus dem Root-Verzeichnis aufrufst.
... wobei ein "Senden an" von einem Root-Ordner aus erst einmal gelingen muss. face-wink

Grüße
bastla
Mitglied: 45426
45426 Mar 24, 2007 at 21:06:41 (UTC)
Goto Top
> wobei ein "Senden an" von einem Root-Ordner aus erst einmal gelingen muss.
Kannste mal sehen, dumm gelaufen. Ist mir noch gar nicht aufgefallen. face-big-smile

Ich nutze SendTo nur für den Unlocker. face-wink
Mitglied: 45753
45753 Mar 24, 2007 at 22:08:28 (UTC)
Goto Top
Prost! Ich geb einen aus...

Ihr habt es echt geschafft! Vielen Dank für Eure Mühe! bastla Deine Finale Version läuft tadellos!

Jetzt kann ich das ganze noch um weitere attribute erweitern und an mein Ausgabemenu von meinen Batch-Dateien die die Desktop.ini und Desktop.ico verwalten anpassen.
Wenn ihr Interesse dran habt wie man Desktop.ini's +- Desktop.ico's in Ordner + alle Unterordner vervielfältigt / löscht / usw. - und das unter Windows - dann kann ich das auch gerne mal posten wenn ihr es wünscht. Allerdings würde es mich nicht wundern, wenn Ihr darauf auch schon eine Lösung wist face-smile

Nochmal danke für eure Hilfe!
Member: bastla
bastla Mar 24, 2007 at 22:16:27 (UTC)
Goto Top
@45426

Ich nutze SendTo nur für den Unlocker.
Für den "Unlocker Assistant" leiste ich mir einen zusätzlichen Prozess ...

Grüße
bastla
Member: bastla
bastla Mar 24, 2007 at 22:19:32 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Freut mich, wenn's klappt - und Deine Lösung könntest Du vielleicht in einem neuen Thread vorstellen.

Schönes WE
bastla
Mitglied: 45753
45753 Mar 25, 2007 at 02:54:30 (UTC)
Goto Top
Hallo, kurz vom Schlafengehen hab ich die Funktionen nun in meiner Batch nochmal wachsen lassen. Wenn man die Batch starten sieht man eine Zusammenfassung aller Desktop.ini's und Desktop.ico's aus allen Unterordner und das eben aus dem Ordner in dem man sich gerade befindet. Um den Screen aktuallisieren zu konnen drückt man zwei mal Enter...

@echo off & setlocal
cls

:start

if NOT EXIST Desktop.ini goto renAnoini
attrib -S -H Desktop.ini > Nul
ren Desktop.ini Desktop.ini.temptemp > Nul
:renAnoini
if NOT EXIST Desktop.ico goto renAnoico
attrib -S -H Desktop.ico > Nul
ren Desktop.ico Desktop.ico.temptemp > Nul
:renAnoico

if [%1] neq  cd /d %1 2>nul || cd /d "%~dp1"  

echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
ECHO.
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordner von...  
echo.
echo  "%cd%"  
echo.
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
echo.
echo  ======= Desktop.ini's =======  
echo.

for /f %%i in ('dir desktop.ini /a-r /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahli-r=%%i  
if not defined anzahl set anzahl=0
echo    Ohne Schreibschutz: %anzahli-r%

for /f %%i in ('dir desktop.ini /ar /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahli+r=%%i  
if not defined anzahl set anzahl=0
echo     Mit Schreibschutz: %anzahli+r%

for /f %%i in ('dir desktop.ini /a /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahlig=%%i  
if not defined anzahl set anzahl=0
echo          Gesamtanzahl: %anzahlig% 

echo.
echo  ======= Desktop.ico's =======   
echo.

for /f %%i in ('dir desktop.ico /a-r /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlo-r=%%i  
if not defined anzahl set anzahl=0
echo    Ohne Schreibschutz: %anzahlo-r%

for /f %%i in ('dir desktop.ico /ar /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlo+r=%%i  
if not defined anzahl set anzahl=0
echo     Mit Schreibschutz: %anzahlo+r% 

for /f %%i in ('dir desktop.ico /a /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlog=%%i  
if not defined anzahl set anzahl=0
echo          Gesamtanzahl: %anzahlog% 

echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
echo.

if NOT EXIST Desktop.ini.temptemp goto renBnoini
ren Desktop.ini.temptemp Desktop.ini > Nul
attrib +S +H Desktop.ini > Nul
:renBnoini
if NOT EXIST Desktop.ico.temptemp goto renBnoico
ren Desktop.ico.temptemp Desktop.ico > Nul
attrib +S +H Desktop.ico > Nul
:renBnoico

set choice=
set /p choice= Ausgeben in Textdatei ? (y/n): 
if not "%choice%" == "" set choice=%choice:~0,1%  
if "%choice%" == "y" goto txtja  
if "%choice%" == "n" goto txtnein  

set choicef=%choice%

cls
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
ECHO.
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordner von...  
echo.
echo  "%cd%"  
echo.
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
echo.
echo  ======= Desktop.ini's =======  
echo.
echo    Ohne Schreibschutz: %anzahli-r%
echo     Mit Schreibschutz: %anzahli+r%
echo          Gesamtanzahl: %anzahlig% 
echo.
echo  ======= Desktop.ico's =======   
echo.
echo    Ohne Schreibschutz: %anzahlo-r%
echo     Mit Schreibschutz: %anzahlo+r% 
echo          Gesamtanzahl: %anzahlog% 
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
echo.

set choice=
set /p choice= "%choicef%" ist keine gueltige Eingabe. Druecke y (Ja) oder n (Nein) und dann ENTER:   
if not "%choice%" == "" set choice=%choice:~0,1%  
if "%choice%" == "y" goto txtja  
if "%choice%" == "n" goto txtnein  
cls
goto start

:txtja
echo. > "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
ECHO. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordner von... >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo  "%cd%" >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo  ======= Desktop.ini's ======= >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo    Ohne Schreibschutz: %anzahli-r% >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo     Mit Schreibschutz: %anzahli+r% >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo          Gesamtanzahl: %anzahlig%  >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo  ======= Desktop.ico's =======  >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo    Ohne Schreibschutz: %anzahlo-r% >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo     Mit Schreibschutz: %anzahlo+r%  >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo          Gesamtanzahl: %anzahlog%  >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
echo. >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  

:txtnein 
cls
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
ECHO.
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordner von...  
echo.
echo  "%cd%"  
echo.
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
echo.
echo  ======= Desktop.ini's =======  
echo.
echo    Ohne Schreibschutz: %anzahli-r%
echo     Mit Schreibschutz: %anzahli+r%
echo          Gesamtanzahl: %anzahlig% 
echo.
echo  ======= Desktop.ico's =======   
echo.
echo    Ohne Schreibschutz: %anzahlo-r%
echo     Mit Schreibschutz: %anzahlo+r% 
echo          Gesamtanzahl: %anzahlog% 
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
echo.

echo  === Exit ===

if EXIST C:\WINDOWS\system32\wait_20.exe goto wait_20
pause
exit

:wait_20
wait_20 1 KEY 
exit

Klasse, mein Formatierungen [Leerzeichen] wurden nicht mitübernommen.
Gibt es eine Möglichkeit seine Batch-Datein (hier) hochzuladen ?
[Edit Biber:] "Code"-Formatierungstags ersetzt ("< code >" statt "[Code]", s. bastla's Folgekommentar[/Edit]
Member: bastla
bastla Mar 25, 2007 at 09:02:23 (UTC)
Goto Top
Hallo wobleibtdiezeit!

Fleißig, fleißig ... face-smile

Kurze Anmerkungen:

Zur Menüeingabe:
if "%choice%" == "y" goto txtja  
Mit einem "if /i" beugst Du auch einer Fehlinterpretation wegen gedrückter Caps-Lock-Taste vor ...
Zu den Ausgaben:
echo ... >> "!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt  
Vielleicht vorweg ein
set t="!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt!"  
und danach dann nur noch
echo ... >> %t%
Die Namensgebung der Ausgabedatei habe ich hiermit ausdrücklich nicht kommentiert. face-wink
Schließlich könntest Du den doppelt vorkommenden Teil zur Ausgabe der statistischen Daten in ein Unterprogramm auslagern, im Sinne von
call :Statistik
Vor dem Sprungziel "Statistik" würdest Du bei Bedarf mit einem "goto :eof" dafür sorgen, dass das Unterprogramm nicht unabsichtlich durchlaufen wird (bei Dir würde das durch "exit" davor derzeit ohnehin verhindert).

Ansonsten: Keep on batchin'
bastla

P.S.: Um Code zu posten, empfiehlt es sich, diesen zwischen die Tags < code> und < /code> (natürlich ohne Leerstellen) zu setzen.
Mitglied: 45753
45753 Mar 25, 2007 at 16:13:40 (UTC)
Goto Top
Danke bastla für Deine Tipps. Ich habe sie alle in meine Batch-Dateien übernommen und es läuft alles ohne Probleme. Ich hatte ausserdem noch Fehler in den Namen der Variablen bei "if not defined...". Allerdings wurden die Nullen trotz des Fehler ausgegeben.
Die Batch sieht nun so aus:

[Code]
@echo off & setlocal
cls

:start

if NOT EXIST Desktop.ini goto renAnoini
attrib -S -H Desktop.ini > Nul
ren Desktop.ini Desktop.ini.temptemp > Nul
:renAnoini
if NOT EXIST Desktop.ico goto renAnoico
attrib -S -H Desktop.ico > Nul
ren Desktop.ico Desktop.ico.temptemp > Nul
:renAnoico

if [%1] neq  cd /d %1 2>nul || cd /d "%~dp1"  

echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
ECHO.
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordnern von...  
echo.
echo  "%cd%"  
echo.
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
echo.
echo  ======= Desktop.ini's =======  
echo.

for /f %%i in ('dir desktop.ini /a-r /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahli-r=%%i  
if not defined anzahli-r set anzahli-r=0
echo    Ohne Schreibschutz: %anzahli-r%

for /f %%i in ('dir desktop.ini /ar /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahli+r=%%i  
if not defined anzahli+r set anzahli+r=0
echo     Mit Schreibschutz: %anzahli+r%

for /f %%i in ('dir desktop.ini /a /s /b 2^>nul^|find /c /i "desktop.ini"') do @set anzahlig=%%i  
if not defined anzahlig set anzahlig=0
echo          Gesamtanzahl: %anzahlig% 

echo.
echo  ======= Desktop.ico's =======   
echo.

for /f %%i in ('dir desktop.ico /a-r /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlo-r=%%i  
if not defined anzahlo-r set anzahlo-r=0
echo    Ohne Schreibschutz: %anzahlo-r%

for /f %%i in ('dir desktop.ico /ar /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlo+r=%%i  
if not defined anzahlo+r set anzahlo+r=0
echo     Mit Schreibschutz: %anzahlo+r% 

for /f %%i in ('dir desktop.ico /a /s /b 2^>nul^|find /c /i "desktop.ico"') do @set anzahlog=%%i  
if not defined anzahlog set anzahlog=0
echo          Gesamtanzahl: %anzahlog% 

echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
echo.

if NOT EXIST Desktop.ini.temptemp goto renBnoini
ren Desktop.ini.temptemp Desktop.ini > Nul
attrib +S +H Desktop.ini > Nul
:renBnoini
if NOT EXIST Desktop.ico.temptemp goto renBnoico
ren Desktop.ico.temptemp Desktop.ico > Nul
attrib +S +H Desktop.ico > Nul
:renBnoico

set choice=
set /p choice= Ausgeben in Textdatei ? (y/n): 
if not "%choice%" == "" set choice=%choice:~0,1%  
if /i "%choice%" == "y" goto txtja  
if /i "%choice%" == "n" goto txtnein  

call :Statistik

set choicef=%choice%
set choice=
set /p choice= "%choicef%" ist keine gueltige Eingabe. Druecke y (Ja) oder n (Nein) und dann ENTER:   
if not "%choice%" == "" set choice=%choice:~0,1%  
if /i "%choice%" == "y" goto txtja  
if /i "%choice%" == "n" goto txtnein  
cls
goto start

:txtja
set t01="!!! Statistik - Desktop.ini & Desktop.ico's !!!.txt"  
echo. >> %t01% 
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- >> %t01%
ECHO. >> %t01%
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordnern von... >> %t01%  
echo. >> %t01%
echo  "%cd%" >> %t01%  
echo. >> %t01%
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ >> %t01%
echo. >> %t01%
echo  ======= Desktop.ini's ======= >> %t01%  
echo. >> %t01%
echo    Ohne Schreibschutz: %anzahli-r% >> %t01%
echo     Mit Schreibschutz: %anzahli+r% >> %t01%
echo          Gesamtanzahl: %anzahlig%  >> %t01%
echo. >> %t01%
echo  ======= Desktop.ico's =======  >> %t01%  
echo. >> %t01%
echo    Ohne Schreibschutz: %anzahlo-r% >> %t01%
echo     Mit Schreibschutz: %anzahlo+r%  >> %t01%
echo          Gesamtanzahl: %anzahlog%  >> %t01%
echo. >> %t01%
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- >> %t01%
echo. >> %t01%

:txtnein 
call :Statistik

echo  === Exit ===

if EXIST C:\WINDOWS\system32\wait_20.exe goto wait_20
pause
goto :eof

:wait_20
wait_20 1 KEY 

goto :eof
:Statistik
cls
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
ECHO.
echo  Suche nach Desktop.ini's und Desktop.ico's aus allen Unter-.+.Ordnern von...  
echo.
echo  "%cd%"  
echo.
echo  ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
echo.
echo  ======= Desktop.ini's =======  
echo.
echo    Ohne Schreibschutz: %anzahli-r%
echo     Mit Schreibschutz: %anzahli+r%
echo          Gesamtanzahl: %anzahlig% 
echo.
echo  ======= Desktop.ico's =======   
echo.
echo    Ohne Schreibschutz: %anzahlo-r%
echo     Mit Schreibschutz: %anzahlo+r% 
echo          Gesamtanzahl: %anzahlog% 
echo.
echo -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
echo.

p.s.: wieso ist der Beitrag schon geschlossen? "Zip Datei per Batch entpacken" Zip Datei per Batch entpacken

Ich hätte eine Lösung für ihn... er muss nicht auf shareware winrar umsteigen. Alzip kann das was er möchte. Das Prog hat auch keine Probleme mit Dateilängen:
"alzip -a [Laufwerk:][Pfad][Dateiname]" zum packen
"alzip -x [Laufwerk:][Pfad][Dateiname]" zum entpacken
http://www.altools.net
http://www.altools.net/ALTools/ALZip/Features/CommandLine/tabid/118/Def ...
Member: Biber
Biber Mar 25, 2007 at 19:02:35 (UTC)
Goto Top
Moin wobleibtdiezeit und alle anderen,

zu Deiner P.S.-Frage nach dem CommandLine-Zip-Tool-Gesucht-Beitrag...
p.s.: wieso ist der Beitrag schon geschlossen? "Zip Datei per Batch entpacken"

---> ich öffne ihn noch mal, dann kannst Du auch gerne die beiden Links auch dort noch einmal posten.

Die Entscheidung des jeweiligen Mods, einen Beitrag zu schliessen, ist sicherlich immer etwas willkürlich.

Der von Dir erwähnte schien mir aus Sicht des Fragestellers zur Zufriedenheit beantwortet zu sein.

In solchen Fällen schliesse ich den Beitrag meist nach kurzer Schamfrist, weil sonst ....
irgendein Suchmaschinen-Anwerfer auf der Suche nach einer Lösung über diesen Beitrag stolpert,
nach kurzem Überfliegen (ca 12.sec) der Postings feststellt, dass dort gar keine Antworten auf die Fragen stehen, die ihn nun beschäftigen,
und dann etwas druntersemmelt, was mit den Worten beginnt "Ich hab genau das gleiche Problem".
Was sich ab der zweiten geposteten Zeile allerdings sehr schnell relativiert, weil es dann meist schnell weitergeht mit ...
"...das klappt auch soweit, aber seit ich DSL habe und mein Nachbar eine 1400W-Senseo Turntable Premium,
zeigt mein USB-Stick manchmal weiße Streifen am Rand. Kann ich das auch ohne Adminrechte über die Gruppenlinien ändern?"


Und deshalb möchte dann lieber einen neuen Beitrag eröffnet haben, denn wenn es wirklich exakt das gleiche Problem ist, sollte auch die gepostete und akzeptierte Lösung passen.

Sollte ich natürlich mal zu voreilig sein mit dem Schliessen eines Beitrags, dann jederzeit gerne eine PN an mich (bzw. den zuständigen Mod).
Dann wird der Beitrag wieder eröffnet.
Grüsse
Biber
Mitglied: 45753
45753 Mar 25, 2007 at 21:09:59 (UTC)
Goto Top
Ok, hab's verstanden. Ich habe meine Antwort nun dort posten können.

Grüsse
wobleibtdiezeit
Member: Biber
Biber Mar 26, 2007 at 05:27:48 (UTC)
Goto Top
Danke Dir, wobleibtdiezeit,

habe den anderen Beitrag wieder geschlossen und werde das auch gleich mit diesem hier tun.

Wie geschrieben: eine Wieder-Eröffnung eines Threads ist kein Problem und ich fühle mich durch diesbezügliche PN-Aufforderungen nicht belästigt.

Nerviger finde ich die oben erwähnten Ich-habe-genau-dasselbe-Problem-Nachtröpfler.

Grüsse
Biber