crasherx
Goto Top

Batch Ordnerstruktur nach einer Datei durchsuchen Diese dann mit type in der Batch anzeigen

Hallo zusammen
Ich quäle mich nun schon einige Stunden an der Lösung eines Problemchen.
Da ich relativer Anfänger bin, was Batch anbelangt... Frage ich mal die Profis.

Es geht um folgendes Skritp:

@echo off
:noteSys1
set saven=save.note
set loadn=load.note
set delen=dele.note
title :::Neue Notitz::
echo ###################################
echo #  [save.note] - Speichern        #
echo #  [dele.note] - Eingabe L”schen  #
echo #  [load.note] - Notitz Laden     #
echo ###################################
echo Neue Notitz:
echo ------------
del /f "%userprofile%\documents\newnote.tmp" >nul  
for /f "tokens=2 delims=:." %%i in ('chcp') do set "CP=%%i"  
chcp 1252>nul
set /p newnote1=
if "%newnote1%"=="%saven%" (  
	goto :savenote
	)
if "%newnote1%"=="%delen%" (  
	goto :delenote
	)
if "%newnote1%"=="%loadn%" (  
	goto :loadnet
	)
echo %newnote1%>>"%userprofile%/documents/newnote.tmp"  
set /p newnote2=
if "%newnote2%"=="%saven%" (  
	goto :savenote
	)
if "%newnote2%"=="%delen%" (  
	goto :delenote
	)
if "%newnote2%"=="%loadn%" (  
	goto :loadnote
	)
echo %newnote2%>>"%userprofile%/documents/newnote.tmp"  
set /p newnote3=
if %newnote3%==%saven% (
	goto :savenote
	)
if %newnote3%==%delen% (
	goto :delenote
	)
if %newnote3%==%loadn% (
	goto :loadnote
	)
echo %newnote3%>>"%userprofile%/documents/newnote.tmp"  
chcp %CP%>nul
:delenote
cls
goto :noteSys1
:savenote
cls
title Speichern...
echo Speichern der Notitz
echo Bitte gib einen gew”nschten Namen an...
echo.
set /p savename="\>  
if exist "%userprofile%\documents\Notitzen\Am [%date%] erstellt" (  
	copy "%userprofile%\documents\newnote.tmp" "%userprofile%\documents\Notitzen\Am [%date%] erstellt\%savename%"  
	) else (
mkdir "%userprofile%\documents\Notitzen\Am [%date%] erstellt"  
copy "%userprofile%\documents\newnote.tmp" "%userprofile%\documents\Notitzen\Am [%date%] erstellt\%savename%"  
)
rem ä = ALT+0132
rem ü = ALT+0129
rem ö = ALT+0148
:loadnote
cls
title Notitzen laden...
echo #################################   Um eine Datei auszuw„hlen
echo # Hier kannst du deine Notitzen #   musst du nur den Dateinamen
echo # einsehen.                     #   eingeben und mit [Enter]
echo #################################   best„tigen.
echo.
tree "%userprofile%\documents\Notitzen" /f /a  
set /p show="\>  
cls
title :::%show%:::
:: Hier merkt man bereits schmerzhaft, dass ich die Anwendung von For Schleifen noch nicht so behersche, wie ich es gerne hätte.. und genau hier benötige ich Hilfe.
FOR /R "%userprofile%\Notitzen\" %%i DO type %show%  
type "%show%"  
pause

Der User speichert Strings zunächst in eine temporäre Datei. Falls er diese dann speichern möchte verschiebt sich der Inhalt von der temporären Datei in eine statische mit dem gewünschten Namen des Users. Diese Datei wird dann noch in einen Ordner mit dem Erstellungs Datum verschoben. Falls der User an dem Tag bereits mehrere erstellt hat, wandern alle gleich datierten in den selben Ordner.

Nun das eigentliche Problem:

Bei :loadnote Möchte ich nun erreichen, dass die Batch die Ordnerstruktur von "%userprofile%\Notitzen\" komplett nach der in Variable %show% deklarierten Datei durchsucht. Und jene dann, mit dem Befehl "type", in der Batch wiederspiegelt.

Ich hoffe doch ich habe mich sachlich und klar ausgedrückt, für jeden konstruktiven Beitrag gilt mein Dank.

Mit freundlichen Grüssen
CrasherX

Content-Key: 202998

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

Printed on: April 19, 2024 at 17:04 o'clock

Mitglied: 16568
16568 Mar 08, 2013 at 06:16:19 (UTC)
Goto Top
Da is ein Schreibfehler drin...?


Lonesome Walker
Member: bastla
bastla Mar 08, 2013 updated at 16:36:05 (UTC)
Goto Top
Hallo CrasherX und willkommen im Forum!

Abgesehen von Deiner etwas eigenwilligen Schreibweise des Wortes "Notiz" - was soll denn geschehen, wenn die Datei nicht gefunden wird?

Wenn Du
for /f "delims=" %%i in ('dir /s/b/a-d "%userprofile%\Notitzen\%show%" 2^>nul') do type "%%i"
verwendest (die Zeile 84 ist natürlich unnötig), wird für nicht gefundene Dateien einfach nix passieren ...

Grüße
bastla
Mitglied: 16568
16568 Mar 08, 2013 at 16:48:20 (UTC)
Goto Top
@bastla:

Das meinte ich noch nicht mal, guckst Du mal GENAU...

23.	) 
24.if "%newnote1%"=="%loadn%" (   
25.	goto :loadnet 
26.	)

Was könnte DA wohl falsch sein...


Lonesome Walker
Member: bastla
bastla Mar 08, 2013 at 16:53:04 (UTC)
Goto Top
Hallo LSW!

Yep - das macht's nicht besser ... face-wink

Grüße
bastla
Member: CrasherX
CrasherX Mar 08, 2013 at 18:06:22 (UTC)
Goto Top
Danke schonmal für eure Hilfe. Es funktioniert soweit so gut. Jetzt möchte ich bloss noch, dass die Schleife auch die Unterordner mit einbezieht um darin die Datei zu suchen.

@lonesome Walker:

set saven=save.note 
set loadn=load.note 
set delen=dele.note 

String: save.note wird in Variable %saven% gespeichert.
Ich weiss, dass dies Befehle unnötig sind, da ich einfach den String(save.note) in " und " setzen könnte. Aber das ist jedermanns Sache.

@echo off
set /p string=">  
if "%string%"=="save.note" (  
goto :saven
)

Die if abfragen sind extra in Klammern, denn nur nachfolgend auflisten lässt das Skript abschmieren, da kein else deklariert wird. Die zwei Klammern sind weniger Code, als unter jeder if-Abfrage noch zusätzlich ein if not Folgebefehl oder eine noch grössere Klammerstruktur mit ettlichen else statements... Denn es soll ja lediglich nach der if Schleife die zwei anderen if Schleifen ablaufen.
if "%string%"=="save.note" goto :saven  
if not %"string"=="save.note" goto :next  

Danke euch face-smile
Member: bastla
bastla Mar 08, 2013 at 18:20:43 (UTC)
Goto Top
Hallo CrasherX!
Jetzt möchte ich bloss noch, dass die Schleife auch die Unterordner mit einbezieht um darin die Datei zu suchen.
Da ja "dir /s" verwendet wird, macht sie das schon ...
Die if abfragen sind extra in Klammern, denn nur nachfolgend auflisten lässt das Skript abschmieren, da kein else deklariert wird.
Kann ich mir nicht vorstellen; außerdem: Wozu gibt es eigentlich den gleichen Ablauf dreimal (mit %newnote1%, %newnote2% und %newnote3%)?

Zeile 53 sollte jedenfalls vor Zeile 51 (und als Kopie auch vor Zeile 70) stehen, und der Code für das Löschen sieht auch noch etwas unausgereift aus face-wink.
LSW hatte mit seinem Hinweis übrigens konkret die Zeile 25, und nicht Deine Variablen gemeint.

Grüße
bastla
Member: CrasherX
CrasherX Mar 08, 2013 at 18:29:37 (UTC)
Goto Top
Leider funktioniert dies bei mir nicht. Ich kann nur Dateien aus dem Rootverzeichniss auslesen.

Bei den verschiedenen %newnote%'s handelt es sich um drei Eingaben. In je eine Zeile... 1. Zeile = %newnote1% 2. Zeile = %newnote2% etc.

Oh O.o den Schreibfehler habe ich völlig übersehen. Danke an LSW face-smile
Member: bastla
bastla Mar 08, 2013 at 19:03:44 (UTC)
Goto Top
Hallo CrasherX!
Ich kann nur Dateien aus dem Rootverzeichniss auslesen.
Du kannst den "dir"-Befehl ja einfach testen, indem Du in einer CMD-Shell
dir /s/b/a-d "%userprofile%\Notitzen\Dateiname"
eingibst ...
Warum willst Du genau 3 Zeilen eingeben lassen? Es wäre mE doch sinnvoller, den Programmteil nur einmal zu verwenden und dem Anwender die Entscheidung zu überlassen ...

Grüße
bastla
Member: CrasherX
CrasherX Mar 08, 2013 at 19:10:41 (UTC)
Goto Top
Wie meinst du den das jetzt? In deinem Dir befehl wird nur nach einer bestimmten Datei in einem Bestimmten Verzeichnis gesucht.

Dam User bleibt je die Wahl... Er kann durch 2 Befehle (save.note, del.note) Die eingegebenen Daten bereits ab der ersten Zeile Speichern, oder auch nach der 2. Zeile, das eingegebene resseten und die Notitz erneut verfassen.
Member: bastla
bastla Mar 08, 2013 at 19:51:26 (UTC)
Goto Top
Hallo CrasherX!
In deinem Dir befehl wird nur nach einer bestimmten Datei in einem Bestimmten Verzeichnis gesucht.
Ist das eine Vermutung oder das Ergebnis Deines Tests?

Grüße
bastla