Batch Besondere DIR-Ausgabe in eine TXT-Datei?

rybog

Newbie
Registriert
Apr. 2014
Beiträge
5
Hallo,

es scheint schon skurril, dass man sich in Windows7-Zeiten noch mit BATCH-Skripten behelfen muss, aber oft ist das der schnellste Weg zum Ziel. Ich schreibe mir ab und zu kleine BATCH-Skripte, die ich mit einer Verknüpfung vom Pop-Up-Menü aufrufe. Jetzt habe ich ein Vorhaben, für das ich einfach einen kleinen Denkanstoß brauche.

Ich habe in einem Verzeichnis c:\work\data\archive> folgende Dateien:
Code:
datei1.prt.1
datei2.prt.1
datei3.prt.1
dateiX.prt.1
datei1.asm.1
datei2.asm.1
datei3.asm.1
dateiX.asm.1
datei1.drw.1
datei2.drw.1
datei3.drw.1
dateiX.drw.1

Ich möchte eine TXT-Datei erstellen, in der Folgendes steht:
Code:
ARCHIVE
#
#
datei1.prt
#
#
datei2.prt
#
#
datei3.prt
#
#
dateiX.prt
#
#
datei1.asm
#
#
datei2.asm
#
#
datei3.asm
#
#
dateiX.asm
#
#
datei1.drw
#
#
datei2.drw
#
#
datei3.drw
#
#
dateiX.drw
Ich habe es mit einer FOR-Schleife probiert, aber irgendwie komme ich zu keinem brauchbaren Ergebnis.
Kann mir jemand auf die Sprünge helfen?

Vielen Dank im Voraus und Gruß.
 
Zuletzt bearbeitet:
Wäre sinnvoll zu wissen was du als Ausgansbasis hast. Was funktioniert nicht?

Damit extrahierst du die Dateinamen:
Code:
dir /b /a-d *.*

Damit kürtzt du den String:
Code:
set string=STRING
set string=%string:~0,-2%
 
Zuletzt bearbeitet:
rybog schrieb:
Ich habe es mit einer FOR-Schleife probiert, aber irgendwie komme ich zu keinem brauchbaren Ergebnis.
Kann mir jemand auf die Sprünge helfen?

Solche Sachen halte ich generell für zu schwierig for Win-Batch. Zwei Möglichkeiten:

a) Powershell (ca. zwei Zeilen)

b) Perl und Git-Bash unter Windows installieren, dann braucht man gar kein "Programm". In Perl (in der Bash für Windows ausgeführt) geht das so (Eingabe direkt in der Shell im Verzeichnis):

basename `pwd`; ls -1 * | perl -F\\. -ane 'print "#\n#\n$F[0].$F[1]\n"'

Ergebnis:
archive
#
#
datei1.asm
#
#
datei1.drw
#
#
datei1.prt
#
#
datei2.asm
#
#
datei2.drw
#
#
datei2.prt
#
#
datei3.asm
#
#
datei3.drw
#
#
datei3.prt
#
#
dateiX.asm
#
#
dateiX.drw
#
#
dateiX.prt

Für solche Sachen ist m. E. eine Bash-Shell (mit oder ohne Perl) einer CMD-Shell enorm überlegen.
 
auf arbeit benutze ich folgendes tool: http://gnuwin32.sourceforge.net/packages/tree.htm
und folgende bat (musste anpassen):
@echo off
echo %date% - %time% > X:\pfad\zur\ausgabedatei\Ordnerstruktur.txt
"C:\Program Files (x86)\GnuWin32\bin\tree.exe" -P *.lnk -L 4 \\netzlaufwerk\Software >> X:\pfad\zur\ausgabedatei\Ordnerstruktur.txt
dieses beispiel erstellt eine struktur vom softwarepfad bis zu einer tiefe von 4 unterordnern. der schalter -P *.lnk bezieht verknüpfungen mit ein.
viel spass
 
Hallo,

vielen Dank an alle, die sich für mein Problem interessiert haben.
Inzwischen ist es mir gelungen das Skript so weit zu verändern (siehe unten), ...
Code:
@echo off
cd /d %1
echo %~n1>> %~n1.mnu
echo #>> %~n1.mnu
echo #>> %~n1.mnu
for /f %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
echo %%x>> %~n1.mnu
echo #>> %~n1.mnu
echo #>> %~n1.mnu
)

dass folgendes Ergebnis rausgekommen ist:
Code:
c:\work\data\archive
#
#
datei1.prt.1
#
#
datei2.prt.1
#
#
datei3.prt.1
#
#
dateiX.prt.1
#
#
datei1.asm.1
#
#
datei2.asm.1
#
#
datei3.asm.1
#
#
dateiX.asm.1
#
#
datei1.drw.1
#
#
datei2.drw.1
#
#
datei3.drw.1
#
#
dateiX.drw.1
#
#

Also, es schaut ganz Ok aus. Jetzt bräuchte ich einen kleinen Tipp, wie ich den Punkt und die Zahl nach dem Punkt entfernen kann und in der ersten Zeile anstatt des ganzen Pfades nur den Namen des Verzeichnisses hinbekomme.

Gruß
Ergänzung ()

So, ich arbeite weiter, um das Problem zu lösen und Folgendes habe ich erreicht.

Das Skript:
Code:
@echo off
cd /d %1
echo %~n1> %~n1.mnu
echo #>> %~n1.mnu
echo #>> %~n1.mnu
for /f "tokens=1,2 delims=." %%x in ('dir /b /l /o:n *.prt.* *.asm.* *.drw.*') do (
echo %%x.%%y>> %~n1.mnu
echo #>> %~n1.mnu
echo #>> %~n1.mnu
)

Das Ergebnis:
Code:
archive
#
#
datei1.prt
#
#
datei2.prt
#
#
datei3.prt
#
#
dateiX.prt
#
#
datei1.asm
#
#
datei2.asm
#
#
datei3.asm
#
#
dateiX.asm
#
#
datei1.drw
#
#
datei2.drw
#
#
datei3.drw
#
#
dateiX.drw
#
#

Jetzt habe ich endlich erreicht, was ich wollte. Also, wie man sieht, mit BATCH-Programmierung kann man noch einiges erreichen.

Vielen Dank noch mal und Gruß.
 
Zuletzt bearbeitet:
Zurück
Oben