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:
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
@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
Please also mark the comments that contributed to the solution of the article
Content-Key: 202998
Url: https://administrator.de/contentid/202998
Printed on: April 19, 2024 at 17:04 o'clock
10 Comments
Latest comment
Da is ein Schreibfehler drin...?
Lonesome Walker
Lonesome Walker
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
verwendest (die Zeile 84 ist natürlich unnötig), wird für nicht gefundene Dateien einfach nix passieren ...
Grüße
bastla
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"
Grüße
bastla
@bastla:
Das meinte ich noch nicht mal, guckst Du mal GENAU...
Was könnte DA wohl falsch sein...
Lonesome Walker
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
Hallo CrasherX!
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 .
LSW hatte mit seinem Hinweis übrigens konkret die Zeile 25, und nicht Deine Variablen gemeint.
Grüße
bastla
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 .
LSW hatte mit seinem Hinweis übrigens konkret die Zeile 25, und nicht Deine Variablen gemeint.
Grüße
bastla
Hallo CrasherX!
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
Ich kann nur Dateien aus dem Rootverzeichniss auslesen.
Du kannst den "dir
"-Befehl ja einfach testen, indem Du in einer CMD-Shelldir /s/b/a-d "%userprofile%\Notitzen\Dateiname"
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