Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 28.02.2012 um 13:32:15 Uhr
Verschoben von "Tools & Utilities" nach "Batch & Shell"
GELÖST

Batch ordner auslesen in variable (und zeilen nummerieren)

Frage Entwicklung Batch & Shell

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

28.02.2012, aktualisiert 18.10.2012, 6072 Aufrufe, 31 Kommentare

Guten Abend, nach langer Zeit wieder einmal ein Problem Trotz intensiver Suche gelang mir noch keine Lösung ...

1. Die Dateien eines Ordners (ohne viele weitere Infos, nur der Dateiname) sollen ausgelesen werden und als variable gespeichert werden:

</code>
FOR /F "usebackq delims=" %%i in (`dir /a/b .\config\*.*`) do set VARIABLE=%%i
type "%variable%"
pause
<code>

Dieses Vorhaben ist mir bisher nicht gelungen..

2. Als Variante möchte ich gerne die Auflistung jeweils mit einer Zeilennummer versehen, da die jeweilige Datei später ausgewählt werden können soll. Es geht um die Auflistung von Sicherheitskopien. Wenn ich dann z.B. 3. eingebe, soll die 3. Kopie wieder eingespielt werden.

OKIDOKI
31 Antworten
Mitglied: bastla
28.02.2012, aktualisiert 18.10.2012
Hallo OKIDOKI!

Errinnert mich an diese Fragestellung ...

... wobei aber das Abspeichern in Variablen eigentlich gar nicht nötig sein sollte - ungetestet etwa so:
01.
::ggf mehr Platz für die Anzeige schaffen 
02.
::mode con lines=50 
03.
 
04.
set /a Max=0 
05.
for /f "tokens=1* delims=:" %%i in ('dir /a/b config^|findstr /n .') do echo (%%i) %%j & set /a Max=%%i 
06.
If %Max%==0 echo Keine Dateien gefunden! & goto :eof 
07.
 
08.
echo\ 
09.
:Eingabe 
10.
set "Nr=" 
11.
set /p Nr=Bitte Nummer der Sicherung angeben:  
12.
if not defined Nr goto :Eingabe 
13.
 
14.
set "Sich=" 
15.
for /f "tokens=1* delims=:" %%i in ('dir /a/b config^|findstr /n .^|findstr /b "%Nr%:"') do set "Sich=%%j" 
16.
if  defined Sich goto :DoIt 
17.
 
18.
set "Auswahl=" 
19.
set /p Auswahl=Auswahl nicht korrekt - nochmals versuchen (J/N)?  
20.
if /i "%Auswahl%"=="j" goto :Eingabe 
21.
goto :eof 
22.
 
23.
:DoIt 
24.
echo "%Sich%" wurde gewaehlt ...
Grüße
bastla

[Edit] Zeile 15 korrigiert [/Edit]
Bitte warten ..
Mitglied: OKIDOKI
28.02.2012 um 12:49 Uhr
Hallo bastla,

die andere Fragestellung ist wirklich ähnlich!

Bei deinem Batch werden alle Dateien angezeigt, ein Auswahl kommt aber nicht. ;-(
Stattdessen erscheint die Meldung "if 0 == 0 echo Keine Dateien gefunden! & goto :eof " und er steigt aus dem batch aus ...

Wahrscheinlich komisch die Frage, aber hast du dazu eine Idee?

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
28.02.2012 um 13:03 Uhr
Hallo OKIDOKI!
hast du dazu eine Idee?
Naja, ich könnte ganz einfach die Zeile 15 korrigieren ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
28.02.2012 um 13:15 Uhr
Hallo bastla,

das wäre schön ...

do set "Sich=%%j" = i

PS: Wie wird die Dateiliste untereinander (alle Dateien untereinander aufgelistet) angezeigt?
PS1: Mit welcher Variablen, die die Dateiliste enthält, kann ich weiterarbeiten?

Grüße
OKIDOKI
Bitte warten ..
Mitglied: icsat
28.02.2012 um 14:32 Uhr
Hallo OKIDOKI,

Zitat von OKIDOKI:
... nach langer Zeit wieder einmal ein Problem ...
Naja, 5 Tage sind jetzt mal nicht so lang imho ==> Batch Timeout in msgbox anzeigen?

Zitat von OKIDOKI:
PS: Wie wird die Dateiliste untereinander (alle Dateien untereinander aufgelistet) angezeigt?
Es gibt keine "Dateiliste". Die Ausgabe erfolgt zeilenweise durch
01.
echo (%%i) %%j
Zitat von OKIDOKI:
PS1: Mit welcher Variablen, die die Dateiliste enthält, kann ich weiterarbeiten?
Mit keiner. Bastla gibt die Dateien aus, ohne sie zu speichern. Nach der Auswahl wird die gewünschte Datei neu ermittelt und über die Variable "Sich" ausgegeben. Er hat es ja auch geschrieben:
Zitat von bastla:
... wobei aber das Abspeichern in Variablen eigentlich gar nicht nötig sein sollte - ungetestet etwa so:

Risiko bei diesem Vorgehen: Verändert sich der Inhalt des Ordners "config" zwischen der Anzeige und dem ermitteln der ausgewählten Datei wird die falsche Datei in die Variable "Sich" geschrieben.

Geht man allerdings von einem stabilen Umfeld aus lässt sich mit dem Skript Dein Primärziel erreichen. Solltes Du dennoch Wert darauf legen eine Dateiliste zu speichern könntest Du unter Verwendung von Bastla's erstem for auch zusätzlich jede Datei in dynamisch generierte Variablen schreiben und nach der Auswahl einfach die entsprechende Variable verwenden.


Gruß icsAT
Bitte warten ..
Mitglied: OKIDOKI
28.02.2012 um 16:06 Uhr
Hallo icsAT,

> Zitat von OKIDOKI:
> ... nach langer Zeit wieder einmal ein Problem ...
Naja, 5 Tage sind jetzt mal nicht so lang imho ==> Batch Timeout in msgbox anzeigen?

Das war eher ein lauwarmer Scherz

> Zitat von OKIDOKI:
> PS: Wie wird die Dateiliste untereinander (alle Dateien untereinander aufgelistet) angezeigt?
Es gibt keine "Dateiliste". Die Ausgabe erfolgt zeilenweise durch
01.
echo (%%i) %%j

> Zitat von OKIDOKI:
> PS1: Mit welcher Variablen, die die Dateiliste enthält, kann ich weiterarbeiten?
Mit keiner. Bastla gibt die Dateien aus, ohne sie zu speichern. Nach der Auswahl wird die gewünschte Datei neu ermittelt und
über die Variable "Sich" ausgegeben. Er hat es ja auch geschrieben:

Leider gibt es keine Liste - du schreibst es wäre möglich, vielleicht so ungefähr: &&>liste.txt echo %i% %j% Da wird aber leider nichts in die Datei geschrieben ;-(
Bei der jetzigen VAriante gibt er bei jeder Datei den Pfad mit aus und dahinter: echo (3) test.zip & set /a Max=3 Das ist natürlich sehr unübersichtlich, daher die Frage, wie es als Liste aller Datei untereinander funktioniert ...

Risiko bei diesem Vorgehen: Verändert sich der Inhalt des Ordners "config" zwischen der Anzeige und dem ermitteln
der ausgewählten Datei wird die falsche Datei in die Variable "Sich" geschrieben.
Geht man allerdings von einem stabilen Umfeld aus lässt sich mit dem Skript Dein Primärziel erreichen. Solltes Du
dennoch Wert darauf legen eine Dateiliste zu speichern könntest Du unter Verwendung von Bastla's erstem for auch
zusätzlich jede Datei in dynamisch generierte Variablen schreiben und nach der Auswahl einfach die entsprechende Variable
verwenden.

In diesem Fall ist von einem stabilen Umfeld auszugehen. Problem wie oben versucht, einen Ansatz zu finden.

Hintergrund mit der Variablen war die Überlegung, die Dateiliste (liste.txt oder Variabel) nicht in der Dosbox zu haben, sondern in folgendem poup.
Anschließend würde ich gerne die Datei auswählen und damit dann weiterarbeiten:

01.
>>"%temp%\msgbox.vbs" ECHO sInfoText = "liste.txt"  
02.
>>"%temp%\msgbox.vbs" ECHO sTitel = "Übersicht"  
03.
>>"%temp%\msgbox.vbs" ECHO iSek = 15 'Anzeigedauer in Sekunden  
04.
>>"%temp%\msgbox.vbs" ECHO Set WshShell = WScript.CreateObject("WScript.Shell")  
05.
>>"%temp%\msgbox.vbs" ECHO Set fso = CreateObject("Scripting.FileSystemObject")  
06.
>>"%temp%\msgbox.vbs" ECHO sText = fso.OpenTextFile(sInfoText, 1).ReadAll  
07.
>>"%temp%\msgbox.vbs" ECHO WshShell.Popup sText, iSek, sTitel, vbInformation 
08.
"%temp%\msgbox.vbs" 
09.
DEL "%temp%\msgbox.vbs"
OKIDOKI: Code angepasst!

PS: Auch wenn die Popup-Geschichte nicht jedem gefällt

Gruß OKIDOKI
Bitte warten ..
Mitglied: icsat
28.02.2012 um 16:40 Uhr
Hallo OKIDOKI,

Zitat von OKIDOKI:
Hintergrund mit der Variablen war die Überlegung, die Dateiliste (liste.txt oder Variabel) nicht in der Dosbox zu haben,
sondern in folgendem poup.
Anschließend würde ich gerne die Datei auswählen und damit dann weiterarbeiten:
Warum schreibst Du dass denn nicht in Deiner Frage???

Zitat von OKIDOKI:
Bei der jetzigen VAriante gibt er bei jeder Datei den Pfad mit aus und dahinter: echo (3) test.zip & set /a Max=3 Das ist natürlich sehr unübersichtlich
Wie kommst Du darauf? Der Parameter "/b" im "dir" sollte die Pfadausgabe verhindern und für mich sieht es eher so aus, als würde die Dateinummer in Klammern und der Dateiname ohne Pfad ausgegeben werden. Im Anschluss wird die Variable "Max" auf die Dateinummer gesetzt, damit nach dem "For" geprüft werden kann, ob überhaupt Dateien gefunden wurden.

Zitat von OKIDOKI:
Leider gibt es keine Liste - du schreibst es wäre möglich, vielleicht so ungefähr: &&>liste.txt echo %i%
%j% Da wird aber leider nichts in die Datei geschrieben ;-(
Naja, so ungefähr. Du solltest allerdings ungefähr ">>" statt ">" und "%%i" und "%%j" statt "%i%" und "%j" verwenden.
Evtl. könntest Du auch eine ggf. vorhandene "liste.txt" noch löschen, bevor Du eine neue erstellst.
Und Du könntes natürlich auch ein
01.
>>liste.txt
direkt an das "%%j" hängen und ungefähr ab Zeile 7 alles löschen.


Gruß icsAT
Bitte warten ..
Mitglied: bastla
28.02.2012 um 17:29 Uhr
Hallo OKIDOKI!

Nach der Zeile 1 frage ich gleich gar nicht (und nach dem "CALL" auch nicht), aber warum ein PopUp und keine InputBox, wenn Du doch eine Eingabe haben willst?

Grüße
bastla
Bitte warten ..
Mitglied: icsat
28.02.2012 um 18:30 Uhr
Hallo Bastla,

ich glaube ich muss OKIDOKI bezüglich der Zeile 1 und des Aufrufes gerade mal in Schutz nehmen,
Zitat von OKIDOKI:
Bei der jetzigen VAriante gibt er bei jeder Datei den Pfad mit aus und dahinter: echo (3) test.zip & set /a Max=3 Das ist natürlich sehr unübersichtlich, daher die Frage, wie es als Liste aller Datei
denn dass sieht mir genau nach dem Gegenteil von dem aus, was Du vermutest. Oder vermutest Du das gleiche wie ich und ich habe Deinen Kommentar nur nicht verstanden??? *confused*


Gruß icsAT
Bitte warten ..
Mitglied: bastla
28.02.2012 um 18:35 Uhr
Hallo icsAT!

Weder noch - ich meinte diese Zeile 1:
ECHO Dim x>"%temp%\msgbox.vbs"
Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
28.02.2012 um 19:37 Uhr
Hallo ihr beiden,
da seht ihr schon wieder mein Unvermögen! Wenn ich eins gelernt habe: Sich so präziese auszudrücken ist so unheimlich schwer, zumal dann die geschriebenen Infos mit den Vorstellungen nicht immer korrelieren ...

(Ich hatte etwas Angst zu sagen, dass ich eine msgbox oder popup Ausgabe haben möchte, da dies schon öfter belächelt wurde.
Also: In einem Verzeichnis befinden sich mehrere Sicherungskopien. diese sollen "schön" aufgelistet werden (ich dachte es geht nur mit popup ... ), eine Auswahl davon getroffen werden können (siehe bastlas Vorschlag, eben auch mit der Nummerierung) und anschließend soll die ausgesuchte Sicherung zurückgespielt werden (im weiteren Verlauf des batches). Deswegen hatte ich anfangs das so geschrieben, weil ich dachte, ich hänge die Box mit Auslesen der Variabel dann einfach dahinter. Dies stellte sich dann als schwieriger heraus als gedacht, weil bastla diesen Supervorschlag mit ohne vorhandener Variabel machte. Finde ich natürlich sehr viel besser aber dann trat für wieder das Problem mit der Ausgabeliste aus und damit verbundenen Abfrage ebenfalls in einer msgbox auf ...

Ich hoffe ihr versteht mich ?
Tut mir leid wegen der Verwirrung....
OKIDOKI

PS: bastla: Korrektur an popup-box vorgenommen - du hast ja recht (Und es steht so oft geschrieben in diesem Forum: ich sehe den Wald vor lauter Bäumen nicht)
Bitte warten ..
Mitglied: icsat
28.02.2012 um 21:22 Uhr
Hallo OKIDOKI,

es tut mir wirklich Leid aber ich kann in Deinem letzten Betrag keine einzige Fragestellung finden. Tschuldigung eine:
Zitat von OKIDOKI:
Ich hoffe ihr versteht mich ?
Und ich befürchte ich kann das nur mit "NEIN" beantworten.

Selbstverständlich habe ich zwischenzeitlich Dein Vorhaben verstanden aber leider schreibst Du mit keinem Wort, wo Du jetzt noch ein Problem hast.

Bastlas Vorschlag erfüllt Deinen Zweck ohne Verwendung von VBS.
Zitat von OKIDOKI:
Dies stellte sich dann als schwieriger heraus als gedacht, weil bastla diesen Supervorschlag mit ohne vorhandener Variabel machte. Finde ich natürlich sehr viel besser face-smile aber dann trat für wieder das Problem mit der Ausgabeliste aus und damit verbundenen Abfrage ebenfalls in einer msgbox auf ...
"mit ohne vorhandener Variable" stimmt ja nicht, die ausgewählte Datei steht in "%Sich%", welche Bastla ja auch mit einem "echo" ausgibt.
Welches Problem hast Du mit der Ausgabeliste, diese brauchst Du bei Bastla's Variante nicht.

Solltest Du unbedingt vbs haben wollen, hat Bastla Dir bereits den Hinweis gegeben eventuell über eine InputBox nachzudenken, was ich für nicht ganz unberechtigt halte. Und ich habe Dir bereits aufgezeigt, wie Du aus Bastla's Batch eine "liste.txt" zauberst.

Sorry, ich kann hier wirklich kein zur Fragestellung passendes Problem erkennen.


Gruß icsAT
Bitte warten ..
Mitglied: bastla
28.02.2012 um 22:25 Uhr
Hallo icsAT!

Ich nehme mal an, OKIDOKI wollte etwas in der Art (und nein, schöner mach ich das nicht ):
01.
@echo off & setlocal 
02.
set "Ordner=config" 
03.
 
04.
set "Liste=%temp%\Liste.txt 
05.
set "Input=%temp%\Input.vbs" 
06.
dir /a/b/od "%Ordner%"|findstr /n . >"%Liste%"  
07.
 
08.
 >%Input% echo L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L) 
09.
>>%Input% echo Do:Ein=InputBox(Join(L,vbCrLf),"Auswahl durch Eingabe der Nummer"):If Not IsNumeric(Ein) Then Ein=0:End If:Loop Until CInt(Ein)^<=Max:WScript.Echo CInt(Ein) 
10.
 
11.
for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i" 
12.
if %Nr%==0 echo Keine Datei gewaehlt! & goto :eof 
13.
 
14.
for /f "tokens=1* delims=:" %%i in ('findstr /b "%Nr%:" %Liste%') do set "Sich=%%j" 
15.
if not defined Sich echo Datei Nr %Nr% nicht gefunden! & goto :eof 
16.
 
17.
del %Liste% 
18.
del %Input% 
19.
 
20.
echo "%Sich%" wurde gewaehlt ...
Noch als Begründung, warum "Max=UBound(L)" und nicht "Max=UBound(L)+1": Die Textdatei endet mit einer Zeilenschaltung, wodurch sich für VBS eine Zeile mehr ergibt - diese (Leerzeile) soll aber natürlich nicht gewählt werden können ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 09:11 Uhr
Super bastla, danke! Genau das was ich gesucht habe!!!

Zwei Fragen hätte ich dennoch: Wie kann ich den Abstand zwischen der Aufzählung und dem Dateinamen vergrößern? Bsp: 1:test.txt --> 1: test.txt
Und wie komme ich zur Sprungmarke, wenn der Ordner leer ist?
... und schöner ist es nicht geworden, sondern genial!

Vielen Dank noch einmal, du hast mir den Tag gerettet!

icsAT: Ich werde versuchen mich präzieser auszudrücken. Danke für deinen Hinweis und deine Hilfe!

OKIDOKI
Bitte warten ..
Mitglied: bastla
29.02.2012 um 11:22 Uhr
Hallo OKIDOKI!

Ansatz für beide Fragen:
Passe die Zeile 6 an, indem Du die Vorgangsweise der Zeilen 4 bis 6 von oben übernimmst (und die Zeile 5 entsprechend umgestaltest):
for /f "tokens=1* delims=:" %%i in ('dir /a/b config^|findstr /n .') do >>"%Liste%" echo %%i : %%j & set /a Max=%%i
Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 11:33 Uhr
Hallo bastla,
das mit dem Abstand funktioniert wunderbar, super! Wenn der Ordner leer ist, meldet er aber: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch."
In der Box sind richtigerweise keine Dateien abgebildet. Aber mit welcher Sprungmarke arbeite ich dann weiter? Denn an dieser Stelle würde ich mir gerne eine Meldung erzeugen, dass keine Dateien vorhanden sind.

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
29.02.2012, aktualisiert 18.10.2012
Hallo OKIDOKI!
Aber mit welcher Sprungmarke arbeite ich dann weiter?
Um mich selbst zu zitieren:
indem Du die Vorgangsweise der Zeilen 4 bis 6 von [Edit] ganz [/Edit] oben übernimmst

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 13:17 Uhr
Hallo bastla,

ich werd damit nicht schlauer und schlau daraus auch nicht. Vielleicht kannst du noch einmal drauf gucken, ich habe versucht den Code umzugestalten und abschließend für alle aufzubereiten.
Das Problem jetzt: Die Liste wird nur im Batch aufgerufen, aber verschwindet auch gleich wieder:

01.
@echo off & setlocal 
02.
set "Ordner=config" 
03.
set "Liste=%temp%\Liste.txt 
04.
set "Input=%temp%\Input.vbs" 
05.
 
06.
 
07.
set /a Max=0 
08.
for /f "tokens=1* delims=:" %%i in ('dir /a/b config^|findstr /n .') do >>"%Liste%" echo %%i : %%j & set /a Max=%%i 
09.
If %Max%==0 echo Keine Dateien gefunden! & goto :eof 
10.
 
11.
>>%Input% echo L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L) 
12.
>>%Input% echo Do:Ein=InputBox(Join(L,vbCrLf),"Auswahl durch Eingabe der Nummer"):If Not IsNumeric(Ein) Then Ein=0:End If:Loop Until CInt(Ein)^<=Max:WScript.Echo CInt(Ein) 
13.
 
14.
for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i" 
15.
if %Nr%==0 echo Keine Datei gewaehlt! & goto :eof 
16.
 
17.
for /f "tokens=1* delims=:" %%i in ('findstr /b "%Nr%:" %Liste%') do set "Sich=%%j" 
18.
if not defined Sich echo Datei Nr %Nr% nicht gefunden! & goto :eof 
19.
 
20.
del %Liste% 
21.
del %Input% 
22.
 
23.
echo "%Sich%" wurde gewaehlt ...

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
29.02.2012, aktualisiert 18.10.2012
Hallo OKIDOKI!

Ich hatte eigentlich gehofft, Du würdest verstanden haben, was die Zeilen 4-6 machen, bzw, dass für die VBS-Variante natürlich die neue Zeile 5 zuständig ist ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 13:45 Uhr
Hallo bastla,

schon gemerkt, habe die Zeile 5 ersetzt. Jetzt geht gar nichts mehr und er kopiert die Listen immer untereinander, so dass die Liste immer länger wird
Wahrscheinlich liegt es auch am schreienden Baby neben mir, aber ich versteh es nett ...

Grüße
OKIDOKI - ich schäme mich
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012, aktualisiert 18.10.2012
Ich gebe aber nicht auf

Vielleicht gehts auch so (als Variante?)
bastla: http://www.administrator.de/forum/pr%c3%bcfen-per-batch-ob-ein-verzeich ...

01.
@echo off & setlocal 
02.
set "Ordner=config" 
03.
if exist "%Ordner%" dir /b /A:-d "%Ordner%">nul 2>nul || goto :leer 
04.
if exist "%Ordner%" dir /b /A:-d "%Ordner%">nul 2>nul 
05.
 
06.
set "Liste=%temp%\Liste.txt 
07.
set "Input=%temp%\Input.vbs" 
08.
dir /a/b/od "%Ordner%"|findstr /n . >"%Liste%"  
09.
 
10.
 >%Input% echo L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L) 
11.
>>%Input% echo Do:Ein=InputBox(Join(L,vbCrLf),"Auswahl durch Eingabe der Nummer"):If Not IsNumeric(Ein) Then Ein=0:End If:Loop Until CInt(Ein)^<=Max:WScript.Echo CInt(Ein) 
12.
 
13.
for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i" 
14.
if %Nr%==0 echo Keine Datei gewaehlt! & goto :eof 
15.
 
16.
for /f "tokens=1* delims=:" %%i in ('findstr /b "%Nr%:" %Liste%') do set "Sich=%%j" 
17.
if not defined Sich echo Datei Nr %Nr% nicht gefunden! & goto :eof 
18.
 
19.
del %Liste% 
20.
del %Input% 
21.
 
22.
echo "%Sich%" wurde gewaehlt ... 
23.
 
24.
:leer 
25.
echo leer 
26.
pause

Jetzt fehlt nur noch der Abstand von 1:XXX -> 1: XXX

Vielleicht hast du noch einen Tipp, das andere bekomme ich so nicht alleine hin ...

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
29.02.2012 um 15:59 Uhr
Hallo OKIDOKI!

Vielleicht so:
01.
@echo off & setlocal 
02.
set "Ordner=config" 
03.
if not exist "%Ordner%" goto :nichtda 
04.
dir /b/a-d "%Ordner%">nul 2>nul || goto :leer 
05.
 
06.
set "Liste=%temp%\Liste.txt 
07.
set "Input=%temp%\Input.vbs" 
08.
del "%Liste%" 2>nul 
09.
for /f "tokens=1* delims=:" %%i in ('dir /b/a-d/od "%Ordner%"^|findstr /n .') do >>"%Liste%" echo %%i : %%j 
10.
 
11.
 >%Input% echo L=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("%Liste%").ReadAll,vbCrLf):Max=UBound(L) 
12.
>>%Input% echo Do:Ein=InputBox(Join(L,vbCrLf),"Auswahl durch Eingabe der Nummer"):If Not IsNumeric(Ein) Then Ein=0:End If:Loop Until CInt(Ein)^<=Max:WScript.Echo CInt(Ein) 
13.
 
14.
for /f %%i in ('cscript //nologo %Input%') do set "Nr=%%i" 
15.
if %Nr%==0 echo Keine Datei gewaehlt! & goto :eof 
16.
 
17.
for /f "tokens=1* delims=: " %%i in ('findstr /b /c:"%Nr% :" %Liste%') do set "Sich=%%j" 
18.
if not defined Sich echo Datei Nr %Nr% nicht gefunden! & goto :eof 
19.
 
20.
del %Liste% 
21.
del %Input% 
22.
 
23.
echo "%Sich%" wurde gewaehlt ... 
24.
:: 
25.
:: was so zu tun ist mit "%Sich%" 
26.
:: 
27.
 
28.
goto :eof 
29.
:nichtda 
30.
echo Ordner "%Ordner%" nicht gefunden 
31.
pause 
32.
goto :eof 
33.
 
34.
:leer 
35.
echo leer 
36.
pause 
37.
goto :eof
Achtung - bei der Suche in Zeile 17 muss die Darstellungsform (derzeit
Nr : Dateiname
also mit Leerzeichen vor und nach dem ":") im Suchbegriff und als zusätzlicher Delimiter (Leerzeichen) berücksichtigt werden!

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 16:10 Uhr
Hallo bastla,

du bist mein Held auf dem weißen Pferd - DANKESCHÖN!

PS: In Zeile 17 %Nr% :" %Liste%' gibt es doch kein Delimiter "also mit Leerzeichen vor und nach dem ":") im Suchbegriff und als zusätzlicher Delimiter (Leerzeichen) berücksichtigt werden!"


OKIDOKI
Bitte warten ..
Mitglied: bastla
29.02.2012 um 16:13 Uhr
Hallo OKIDOKI!

Für das Suchen ist ja nur das Leerzeichen vor dem ":" von Bedeutung (Du kannst aber auch das darauf folgende mit aufnehmen); als Delimiter benötigst Du das Leerzeichen, damit nicht der Dateiname mit führendem Leerzeichen in die Variable gesetzt wird - Erklärung: Da unmittelbar aufeinander folgende Delimiter in Batch nur als ein Trennzeichen gelsten, wird bei der Zerlegung aus der gefundenen Zeile die Nr in %%i geschrieben, " : " als Trennzeichen entfernt und dann der Dateiname in %%j übernommen; würdest Du den Delimiter "Leerzeichen" weglassen, würde Nr + Leerzeichen vor dem (dann einzigen Trennzeichen) ":" in %%i stehen und Leerzeichen + Dateiname in %%j ...

Alternativ könntest Du zB auch folgende beiden Zeilen verwenden:
for /f "tokens=1* delims=:" %%i in ('dir /b/a-d/od "%Ordner%"^|findstr /n .') do >>"%Liste%" echo %%i__%%j
und
for /f "tokens=1* delims=_" %%i in ('findstr /b /c:"%Nr%_" %Liste%') do set "Sich=%%j"
Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
29.02.2012 um 16:17 Uhr
Hallo bastla,

danke für die Erklärung!

So, noch einmal herzlichen Dank!

Zusammenfassend für weitere USER:
Ein Verzeichnis wird ausgewählt, der Ordnerinhalt numeriert angezeigt. Jetzt kann per Auswahl mit der entsprechenden Datei weitergearbeitet werden. Meldungen erfolgen auch wenn kein Ordner vorhanden ist, keine Datei gewählt wurde oder der Ordner leer ist. Auswahl in einem Fenster!

Gruß OKIDOKI
Bitte warten ..
Mitglied: Biber
29.02.2012 um 19:32 Uhr
[OT]
Zitat von OKIDOKI:
Hallo bastla,

du bist mein Held auf dem weißen Pferd - DANKESCHÖN!
Hmm, ob das Pferd sich wohl so euphorisch bedankt hat?
Böse Zungen würden behaupten, das weiße Pferd war ein Rappe, der erst kalkweiß geworden ist, als bastla aufsteigen wollte...

Gut, dass hier im Forum böse Zungen eher selten sind ...

SCNR
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
29.02.2012 um 19:41 Uhr
[OT]
Hallo Biber!
SCNR
Aber geh - Du weißt doch, dass ich hobbymäßig Phlegmadicker bin (aber das Bild mit dem armen Gaul mag ich mir trotzdem nicht vorstellen) ...

Grüße
bastla
[OT]
Bitte warten ..
Mitglied: OKIDOKI
01.03.2012 um 10:58 Uhr
Hallo bastla, hallo Biber,

ich bin mir sicher, dass es sich bei diesem Virtualpferd um ein stattliches Tier handelt, auf dem der "Batchelor" würdig durchs Web reitet
(Sehr schön die Kommentare mit anzusehen, wenn die Arbeit erst erledigt ist )

Zu bastlas Nachtrag möchte ich noch ergänzen: Die Codevariante trägt dazu bei, dass die Meldungen bei einer ungültigen Zahleneingabe folgende Ausgaben wegfallen:

01.
FINDSTR: // wurde ignoriert 
02.
FINDSTR: /- wurde ignoriert 
03.
FINDSTR: /d wurde ignoriert 
04.
Datei Nr 13 nicht gefunden! 
05.
Drücken Sie eine beliebige Taste . . .

Grüße
OKIDOKI
Bitte warten ..
Mitglied: bastla
01.03.2012 um 11:02 Uhr
Hallo OKIDOKI!

Abseits des tierischen Aspekts - eigentlich dürfte es keine ungültige Zahleneingabe geben, da nur Werte von 0 bis zur höchsten Dateinummer akzeptiert werden ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
01.03.2012 um 11:21 Uhr
Hallo bastla,

bei 0 findet er die Datei nicht und springt weiter, ab größer als Dateianzahl akzeptiert er die Eingabe nicht und mach gar nichts - was ja eingentlich auch richtig ist. Allerdings könnte "ich betone könnte" er bei "größer als Dateianzahl" auch dieselbe Meldung auswerfen wie bei einer 0, also "keine Datei gewählt!".

Gruß OKIDOKI
Bitte warten ..
Mitglied: bastla
01.03.2012, aktualisiert 08.02.2013
Hallo OKIDOKI!
Allerdings könnte "ich betone könnte" er bei "größer als Dateianzahl" auch dieselbe Meldung auswerfen wie bei einer 0, also "keine Datei gewählt!".
Nicht, wenn mein Code das tut, was er soll ...

... aber falls Du das so haben wolltest (meine Überlegung war, dass es sich dabei einfach um einen Eingabefehler handelt und es daher eine weitere Chance geben sollte - ein Abbruch ist ja ohnehin immer möglich), wäre die Zeile 12 auf
>>%Input% echo Ein=InputBox(Join(L,vbCrLf),"Auswahl durch Eingabe der Nummer"):If Not IsNumeric(Ein) Then Ein=0:End If:If CInt(Ein)^>Max Then Ein=0:End If:WScript.Echo CInt(Ein)
zu ändern ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
Dateien im Ordner auslesen und umbennen (10)

Frage von jocheng zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Ordner erstellen und verschieben (6)

Frage von Fromeonly zum Thema Batch & Shell ...

Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...