dell-xps
Goto Top

Mit Dir Befehl einmal nur Dateien im Ordner ausgeben und einmal nur die Ordnerinhalte

Hey leute,

ich weiß der Titel hört sich etwas komisch an. Jedoch würde ich gerne von einem Pfad (z.b. D:USER\EigeneDokumente\2011) einmal nur die Dateien ausgeben und einmal nur die Unterordnerinhalte, mit einer Batch Datei.
D.H
In dem Ordner 2011 befinden sich Dateien z.b. Dokumente, Bilder etc und einige Ordner z.b. Projekte, Produkte und einen .svn Ordner.
Nun würde ich gern mit dem Dir befehl einmal nur die Dateien ausgeben und einmal nur die Unterordner.

Wie mach ich das am Besten?

Indem ich eine Variable (z.b. NICHT_AUSGEBEN) erstelle, die alle Ordnernamen enthält. Mit dieser Variable nutze ich dann findstr /v "%NICHT_AUSGEBEN%".
Geht das? Wenn ja wie trage ich das in die Variable ein? Oder gibts da eine einfache Lösung?

Gruß XPS

PS: Ich hoffe ihr versteht mein anliegen

Content-Key: 174622

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

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: Connor1980
Connor1980 13.10.2011 um 11:50:03 Uhr
Goto Top
Hi,

hast du dir mir dir /? die Optionen mal angeschaut?

Grüße
Mitglied: Jochem
Jochem 13.10.2011 um 11:51:26 Uhr
Goto Top
Moin,

(1)
 dir /ad
listet alle Verzeichnisse in einem Verzeichnis auf

und

(2)
 dir /a-d
listet alle Nicht-Verzeichnisse (also Dateien) in einem Verzeichnis auf.

Das Ergebnsi von (1) in eine Datei geschrieben, welche als Eingabe für (2) genutzt wird, sollte Deine Frage beantworten.

Gruß J face-smile chem
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 11:53:35 Uhr
Goto Top
Hey Connor1980,

ja hab ich. Du meinst warscheinlich ich soll: Dir /A-D nehmen um keine Verzeichnisse anzuzeigen oder?
Hab ich schon probiert, da gibt er mir immer noch die Ordner Inhalte aus.
Gruß XPS
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 11:57:43 Uhr
Goto Top
hey Jochem,

wenn ich nur
 dir /ad 
eingebe, gibt er mir garnichts aus, sondern überspringt den dir Befehl nur.

Gruß XPS
Mitglied: 60730
60730 13.10.2011 um 12:04:46 Uhr
Goto Top
moinsen,

ist ja komisch ..

glaub ich dir irgendwie nicht - oder benutzt du dos 2.01?
Mitglied: Connor1980
Connor1980 13.10.2011 um 12:05:57 Uhr
Goto Top
Hi,

Was heißt "überspringt"? Wird der Befehl ausgeführt oder nicht? Was ist die Rückmeldung? Oder ist der Ordner leer?
Nur Verzeichnisse aller Unterordner: dir /a:d /s
alle nicht-Verzeichnisses das aktuellen Ordners: dir /a:-d

Grüße
Mitglied: Jochem
Jochem 13.10.2011 um 12:07:28 Uhr
Goto Top
Moin,

dann poste mal das Script hier.

Habs gerade auf XP SP3 getestet, funktioniert.

dirdat.cmd
@Echo off
cls
dir c:\test2 /ad > dirdat2a.txt
pause
dir c:\test2 /a-d > dirdat2b.txt
pause

dirdat2a.txt
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: XXXX-YYYY

 Verzeichnis von c:\test2

13.10.2011  12:01    <DIR>          .
13.10.2011  12:01    <DIR>          ..
24.02.2010  10:53    <DIR>          Access-Schulung
24.11.2010  10:21    <DIR>          Volumes
               0 Datei(en)              0 Bytes
               4 Verzeichnis(se),  2.915.893.248 Bytes frei

dirdat2b.txt
 Volume in Laufwerk C: hat keine Bezeichnung.
 Volumeseriennummer: XXXX-YYYY

 Verzeichnis von c:\test2

13.10.2011  12:01                97 dirdat.cmd
13.10.2011  12:03               394 dirdat2a.txt
13.10.2011  12:03                 0 dirdat2b.txt
               3 Datei(en)            491 Bytes
               0 Verzeichnis(se),  2.915.893.248 Bytes frei

Gruß J face-smile chem

PS. Bei dem obigen Beispiel steht im DOS-Fenster dann nur zweimal "Drücken Sie eine beleibige Taste ..." . Insoweit wird der Befehl "übersprungen", wenn man "keine Anzeige von Aktionen" als "überspringen" definiert.
Mitglied: Skyemugen
Skyemugen 13.10.2011 um 12:14:33 Uhr
Goto Top
Aloha,

also irgendwie ...

Jedoch würde ich gerne von einem Pfad (z.b. D:USER\EigeneDokumente\2011) einmal nur die Dateien ausgeben und einmal nur die Unterordnerinhalte = Dateien?, mit einer Batch Datei.
also dir /a-d und dir /a-d /s (und eventuell bei beiden noch /b?)
Nun würde ich gern mit dem Dir befehl einmal nur die Dateien ausgeben und einmal nur die Unterordner.
hier dann entweder wie oben oder dir /ad /s (auch wieder mit /b?)

Indem ich eine Variable (z.b. NICHT_AUSGEBEN) erstelle, die alle Ordnernamen enthält. Mit dieser Variable nutze ich dann findstr /v "%NICHT_AUSGEBEN%".
Geht das? Wenn ja wie trage ich das in die Variable ein? Oder gibts da eine einfache Lösung?
set "var=Inhalt"? findstr /v "%var%"?

Was genau verstehst du unter ausgeben, wie sieht die Endverarbeitung der Daten aus?

greetz André


@Jochem

"Drücken Sie eine beleibige Taste ..."
*sabber* beleibig, da ist bestimmt viel dran, gut, dass es gleich Mittag gibt face-wink
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 13:45:09 Uhr
Goto Top
hey
ich glaub eure fragen klären sich, wenn ihr mein komplettes programm seht:
@echo off
@setlocal

SET /p ORDNER=Bitte Ordnername eingeben: 
SET PATH=D:USER\EigeneDokumente\2011
SET AUSGABE_DATEI=D:USER\Ausgaben\test.txt

for /f "delims=" %%S in ('dir /b /s /A-D "%PATH%"') do call :Auflistung "%%s"  

pause

:Auflistung
for /f "tokens=5 delims=\" %%a in ("%~1") do (  
	echo Datei: %%a
	)>> %AUSGABE_DATEI%
)
goto :eof 

Gruß XPS
Mitglied: Skyemugen
Skyemugen 13.10.2011 um 13:55:33 Uhr
Goto Top
...

ich glaub eure fragen klären sich

... nö?

Aber ich kann dir mal als Korrektur in Zeile 8 vorschlagen, die Variable korrekt zu schreiben, denn %%S und %%s sind zwei verschiedene Paar Schuhe ...

Egal, momentan bin ich vollgefressen und glaube eh, dass die Lösung wieder einmal bereits im Forum existiert und in der cmd-Hilfe und den Vorkommentaren ...

greetz André
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 14:02:08 Uhr
Goto Top
ach mist, das mit %%s und %%S is nen Tipfehler gewesen. funktioniert aba trotzdem nicht.

also hab mir alles duchgelesen, und geht nicht.

Wie is es denn mit meinem Vorschlag? geht das so wie ich das vorgeschlagen hab? also mit der Variablen?

Gruß XPS
Mitglied: 60730
60730 13.10.2011 um 14:37:31 Uhr
Goto Top
@echo off
alleine reicht ja noch nicht....
SET PATH=
Muß auch noch rein....
Nööö mensch, also würglich....
SET /p ORDNER=
WTF?
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 14:42:57 Uhr
Goto Top
was kommt den zu @echo off noch dazu?

und schau dir doch mal bitte Zeite 5 vom Code an. Da steht ja: SET PATH=D:USER\EigeneDokumente\2011

Gruß XPS
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 14:45:42 Uhr
Goto Top
SET /p ORDNER=
wollte ich mal noch hinzufügen, dass man nen ordnername eingaben kann. hier hab ich ihn verrübergehen automatisch hinzugefügt (2011)

Gruß XPS
Mitglied: 60730
60730 13.10.2011 um 14:49:51 Uhr
Goto Top
Zitat von @Dell-XPS:
was kommt den zu @echo off noch dazu?
liess mal mein Hauzu zum Thema..
und schau dir doch mal bitte Zeite 5 vom Code an. Da steht ja: SET PATH=D:USER\EigeneDokumente\2011

Kennst du die Variablen?
Und wenn ja, warum nimmst du dann eine Betriebsystemeigene für diese zusammengefundene exBastla Version?
was sagte mein alter Meister so gerne - was Hände bauen, können Ärscheindiziert stürzen
Und das allein ist immer noch nicht so fies, du benutzt x Variablen und welche werden dann tasächlich beackert?
Gruß XPS

Du machst es einem würglich schwer und nix komma garnix schreibst du über den Sinn von Tokens 5, das macht doch wirklich keinen Spass....

Du stiftest uns damit an, das nachzubauen, was wir vermuten (sinds denn wirklich immer 5 \) - warum nutzt du nicht mal set /? For /? und siehst dir dpa; dpnxa usw an?
Mitglied: pieh-ejdsch
pieh-ejdsch 13.10.2011 um 14:50:03 Uhr
Goto Top
moin XPS,

Die Variable Path ist wofür gedacht? ...

Ah ja um die Richtigen Pfade für ausführbare Programme zu Horten.
wäre kontraproduktiv dann ein Find oder Findstr oder andere NichtCMD-Befehle auszuführen.

Für eine Bugbehaftete Batch empfiehlt Timo immer
@echo on
und führe diese Batch in einem CMD-Fenster aus.

Fällt Dir dann etwas an dem Pfad auf?

Gruß Phil
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 15:09:25 Uhr
Goto Top
wie meinst du das jetzt Phil?
is es besser wenn ich den Dateipfad reinschreibe anstatt %PATH%?
gruß xps
Mitglied: pieh-ejdsch
pieh-ejdsch 13.10.2011 um 15:28:21 Uhr
Goto Top
öffne die CMD

>echo a|find "a"  
a

>set Path=D:\Extra

>echo a|find "a"  
Der Befehl "find" ist entweder falsch geschrieben oder  
konnte nicht gefunden werden.

Benutze eine andere Variable für die eine Datei anstatt Path

einen Überblick über Systemvariablen bekommst Du mit
set

Gruß Phil
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 15:29:12 Uhr
Goto Top
im moment bin ich soweit, dass er mir was ausgibt, jedoch alle dateien mit den unterordnern
Dazu muss ich folgendes verwenden:
for /f "delims=" %%s in ('dir /b /s /a-d "%PATH%"') do call :Auflistung "%%s"
liegt wo an dem /s. In der CMD heißts ja bei /c Listet Dateien und alle Unterverzeichnisse auf.
Gibts den gleich befehl nicht, ohne die Unterverzeichnisse?

Gruß XPS
Mitglied: 60730
60730 13.10.2011 um 15:29:50 Uhr
Goto Top
Zitat von @Dell-XPS:
wie meinst du das jetzt Phil?

ich bin zwar nicht der Philosophische, aber fällt dir was auf - 3* der gleiche Zaunpfahl gefällt, bald wirst du gepfahlt.
is es besser wenn ich den Dateipfad reinschreibe anstatt %PATH%?
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

N:\>set p
Path=C:\Programme\Windows Resource Kits\Tools\;C:\Programme\CA\SC\CAWIN\;C:\WIND
OWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 15 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=0f07
ProgramFiles=C:\Programme
PROMPT=$P$G
Gibts den gleich befehl nicht, ohne die Unterverzeichnisse?

ok, dann halt

  • for /?
  • set /?
UND
  • DIR /?
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 15:37:44 Uhr
Goto Top
ok. habs mit ner anderen Variablen versucht. Ging trotzdem nicht.
habs mit AUSGABE probiert.
Gruß XPS
Mitglied: Dell-XPS
Dell-XPS 13.10.2011 um 16:01:50 Uhr
Goto Top
wie gleichen Zaunpfahl gefällt, bald wirst du gepfahlt.?

was soll das sein?

ja ich probier ja die ganze zeit rum, mit for set und dir
jedoch ohne erfolg

gruß xps
Mitglied: 60730
60730 13.10.2011 um 16:05:39 Uhr
Goto Top
@dellxps.....

Erinner mich bitte daran, dss ich beim nächsten mal den Maulkorb anziehe und mich brav vor die Türe stelle...

Keiner weiß, was du eigentlich willst - entweder sind wir alle plemplem, oder der hase liegt woanders begraben.

Du willst was machen?
Mit Dir Befehl einmal nur Dateien im Ordner ausgeben und einmal nur die Ordnerinhalte
Das ganz sicher nicht.

Entweder du schreibst jetzt und bitte dann in Zukunft mal ganz sachlich, durchdacht mit max. 2 Tippfehlern was dein Ziel ist, oder mein Ziel wird sein - dich komplett zu ignorieren.

In der CMD heißts ja bei /c Listet Dateien und alle Unterverzeichnisse auf.

   /C         Zeigt das Tausendertrennzeichen bei Dateigrößen an (Standard-
             einstellung). Verwenden Sie /-C, um das Tausendertrennzeichen
             nicht anzuzeigen.

Setz dich bloss niemals mit Viper5000 zusammen und macht ihr beiden bloss niemals nie zusammen eine Firma auf.
Ihr beiden passt wie die Faust aufs Auge zusammen. Und wenn ja nennt die Firma Merkbefreit & Lernresistent.
Mitglied: 60730
60730 13.10.2011 um 16:12:52 Uhr
Goto Top
Zitat von @Dell-XPS:
wie gleichen Zaunpfahl gefällt, bald wirst du gepfahlt.?
was soll das sein?
ja ich probier ja die ganze zeit rum, mit for set und dir

Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:

    %~I         - Expandiert %I und entfernt alle umschließenden
                  Anführungszeichen (").
    %~fI        - Expandiert %I zu einem vollständigen Dateinamen.
    %~dI        - Erzeugt nur den Laufwerkbuchstaben von %I.
    %~pI        - Erzeugt nur den Pfad von %I.
    %~nI        - Erzeugt nur den Dateinamen von %I.
    %~xI        - Erzeugt nur die Dateierweiterung von %I.
    %~sI        - Erzeugter Pfad enthält nur kurze Dateinamen.
    %~aI        - Erzeugt die Dateiattribute von %I.
    %~tI        - Erzeugt Datum und Zeit von %I.
    %~zI        - Erzeugt die Dateigröße von %I.
    %~$PATH:I   - Durchsucht die in der PATH-Umgebungsvariablen
                  angegebenen Verzeichnisse und expandiert die erste
                  gefundene Datei %I zu dem vollständigen Dateinamen.
Drücken Sie eine beliebige Taste . . .

jedoch ohne erfolg

Probiers bitte im stillen Kämmerlein

gruß xps

Adieu, du schaffst mich und wir beide schauen uns mal die Seite genau an. Vielleicht fällt dann der Groschen.
Mitglied: Biber
Biber 15.10.2011 um 15:10:10 Uhr
Goto Top
Moin Dell-XPS,

ich möchte doch noch mal nachfragen, wie denn nun genau der Status dieses Beitrags nach den ertsen 24 Kommentaren nun ist.

Ein Haken ist ja nun noch nicht dran - was darauf schliessen lässt, dass vermutlich dein Schnipsel immer noch nicht funktioniert.
Kannst du bitte noch mal den jetzt aktuellen Entwurfsstand posten mit der Erläuterung, was er denn noch nicht richtig macht?

Grüße
Biber
Mitglied: Dell-XPS
Dell-XPS 17.10.2011 um 11:25:46 Uhr
Goto Top
hey biber,
also im moment bin ich soweit, dass meine Ausgabe, wenn ich es in der CMD ausprobiere ohne weitere funktioniert.

Mein Code sieht so aus (für die Batch):
@echo off
@setlocal

SET ORDNER=D:USER\EigeneDokumente\2011
SET AUSGABE_DATEI=D:USER\Ausgaben\test.txt

for /f "delims=" %%s in ('dir /b /s /A-D "%ORDNER%"') do call :Auflistung "%%s"  

pause

:Auflistung
for /f "tokens=5 delims=\" %%a in ("%~1") do (  
	echo Datei: %%a
	)>> %AUSGABE_DATEI%
)
goto :eof 


Das mit der Varialben PATH hab ich inzwischen nachgelesen.

Nun noch mal zum Verständnis, was ich genau haben will:
Also, ich habe einen Ordner (Pfad: D:USER\EigeneDokumente\2011), in diesem befinden sich einige Dateien und einige Ordner. Nun würde ich gern die Datei-Namen in eine .txt-Datei ausgeben (Pfad: D:USER\Ausgaben\test.txt). Oben wäre das die test.txt-Datei. Bisher habe ich versucht durch den Dir-Befehl, mit /a-d die Verzeichnisse nicht auszugeben. Jedoch nur mit Erfolg wenn ich es direkt in der CMD versuchte.

Ich hoffe ich habe es diesmal besser beschrieben... hab mir viel mühe gegeben.
Gruß XPS
Mitglied: pieh-ejdsch
pieh-ejdsch 17.10.2011 um 11:49:47 Uhr
Goto Top
moin XPS,

Zitat von @pieh-ejdsch:
Fällt Dir dann etwas an dem Pfad auf?

SET ORDNER=D:USER\EigeneDokumente\2011
SET Ordner=D:\User\EigeneDokumente\2011
Deine Unteroutine kannnst Du getrost in Zeile 07 eindampfen
for /f "tokens=5 delims=\" %%s in ('dir /b /s /A-D "%ORDNER%"') do >>"%Ausgabe_Datei%" echo %%s  

Zeile 09 sollte mit einem "goto :eof" abschliessen.
das "Problem" ist %%s:
das Fünfte Token wird ausgegeben.
Du solltest Die Anweisung der Forschleife (DIR ...) nochmal im Prompt ausgeben lassen und die Backslashes in den AuzsgabeZeilen Zählen.
bei mindestens vier sollte es funktionieren.

Gruß Phil
Mitglied: 60730
60730 17.10.2011 um 12:33:05 Uhr
Goto Top
Servus Phil,

irgendwie @echo off ...

Dieses Konstrukt mit seinen 5 Tokens hab ich ihn doch schon vor xx Tagen .... der 13. war übrigens kein Freitag
for /f "delims=" %a in ('dir /b /A-D "%ORDNER%\"') do echo %~nxa
@notebookbesitzer:
Als ob es hier nicht genügend Tipps zu deinem "Problem", Grundsätzliche Anleitungen zum Thema und als ob das dein erster Versuch ist, uns den nach dem Weg zum Bahn
hof zu fragen wäre....

Gruß
Mitglied: Dell-XPS
Dell-XPS 18.10.2011 um 11:28:52 Uhr
Goto Top
hey leute,
also ich habs jetzt geschafft! (hab jetzt aber gerade gesehen, dass meine Lösung die ich rausgefunden hab genau die Lösung is die mir TimoBeil geschickt hat. face-smile Danke trotzdem)


also so:
pushd "%ORDNER%  
for /f "delims=" %%d in ('dir /b /a-d') do echo %%d >>%AUSGABE_DATEI%  
popd 

Bin nun fast fertig mit der Batch.
Eine frage hätte ich jedoch noch:
Ich habe folgende Variable: VERSION
Diese enhält: ABC7.70
Nun würde ich gern automatisch immer die Ziffen in eine andere Variable speichern (oder mehrere, je nachdem wie es einfacher ist) um folgende Ausgabe zu erzeugen:
7.7.0.
ist so etwas möglich?
Ich schätze mal das geht mit: for /f "tokens= delims= " ...
nur wie genau das weiß ich nicht. Kann mir da jemand weiter helfen?

Gruß XPS
PS: und danke nochmal an TimoBeil
Mitglied: 60730
60730 18.10.2011 um 16:46:59 Uhr
Goto Top
moin,

Ich habe folgende Variable: VERSION
Diese enhält: ABC7.70
ist so etwas möglich?

ja - aber diese Baustelle bekommt bitte vorher einen klimakteriumgrünen Haken
  • du stellst für diese Frage eine eigenen fred
  • und damit das nicht wieder so ausartet, überleg dir genau, was du willst.

Eine potentielle Gegenfrage wäre zum Bleistift, ist die Variable immer gleichlang oder ist ABC ein fester Wert.

Hier ist dann Ferma la porte oder rien ne va plus.

Danke