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

Batch Script welches Pfad zu allen a.txt Dateien ausgibt?

Frage Entwicklung Batch & Shell

Mitglied: webtrajo

webtrajo (Level 1) - Jetzt verbinden

26.04.2010 um 14:52 Uhr, 3295 Aufrufe, 16 Kommentare

Hallo,

ich bin auf der Sucher nach einem Script welches einen Verzeichnispfad auf meiner
Festplatte nach "a.txt" durchsucht und mir dazu die dazugehörigen Pfade ausgibt.

Hat jemand eine Idee?

Vielen Dank!
Gruß
Mitglied: Dani
26.04.2010 um 14:56 Uhr
Hi,
versuch es mal manuell in der Konsole mit "dir /s /b a.txt". Damit sollten alle Dateien gefunden und ausgegeben werden.


Grüße,
Dani
Bitte warten ..
Mitglied: webtrajo
26.04.2010 um 15:05 Uhr
Hallo,
leider kein Erfolg. Gibt es eine andere Möglichkeit?
Gruß
Bitte warten ..
Mitglied: edepfau
26.04.2010 um 15:05 Uhr
Auf der Kommandozeile listet
01.
for /R E:\PFAD %i in (a.txt) do @echo %i
alle Dateien namens "a.txt" in E:\PFAD und allen Unterverzeichnissen auf, vollständig mit Pfad.

01.
for /R E:\PFAD %i in (a.txt) do @echo %~pi
gibt nur die Pfade zurück. Allerdings auch mehrfach, wenn es mehr als ein Treffer pro Verzeichnis gibt.



Hast Du wirklich vorher schon alles durchprobiert gehabt?

Gruss,
Ede
Bitte warten ..
Mitglied: Dani
26.04.2010 um 15:10 Uhr
Hi,
seltsam...was für ein Betriebssystem benutzt du?

Bei mir sieht das so aus:
01.
C:\>dir /s /b firefox 
02.
C:\Lokal\Firefox 
03.
C:\Lokal\Firefox\App\Firefox 
04.
C:\Users\test\AppData\Roaming\Mozilla\Firefox
Läuft bei mir unter Windows 7...


Grüße,
Dani
Bitte warten ..
Mitglied: bastla
26.04.2010 um 15:26 Uhr
@edepfau
Schaut auch lustig aus, wenn Du
for /R E:\PFAD %i in (ichbinnichtda.txt) do @echo %i
draus machst ...

Insofern würde ich Danis Ansatz bevorzugen (und zur Not mit "/a-d" ergänzen).

Grüße
bastla
Bitte warten ..
Mitglied: edepfau
26.04.2010 um 15:42 Uhr
das scheint eine Eigenart der for-Schleife zu sein..kann aber sehr einfach durch
01.
for /R E:\PFAD %i in (a.txt) do @if exist %i echo %~pi
behoben werden.
Inzwischen habe ich mich darum gekümmert, den uniq-Befehl nachzubilden, damit die Pfade nur einmal angezeigt werden.

Das geht in einem Batchfile z.B. so
01.
@echo off 
02.
for /R E:\PFAD %%i in (%1) do @if exist %%i CALL :COMP "%%~pi" 
03.
set _last= 
04.
set _this= 
05.
goto :EOF 
06.
 
07.
:COMP 
08.
set _this=%~1 
09.
if defined _last ( 
10.
   if not "%_last%"=="%_this%" ( 
11.
      set _last=%_this% 
12.
      echo %_this% 
13.
14.
) else ( 
15.
   echo %_this% 
16.
   set _last=%_this% 
17.
18.
goto :EOF
Als erster Parameter wird der Dateiname oder ein Muster erwartet (*.log). Ausserdem werden hier Pfade mit Leerzeichen richtig behandelt.

Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
Bitte warten ..
Mitglied: bastla
26.04.2010 um 16:07 Uhr
@edepfau
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
Sollte wirklich "nur Pfade" gemeint gewesen sein, dann wäre natürlich eine Schleife erforderlich - zB in der "/f"-Variante (müsste sich dann auch nur um die tatsächlichen Treffer kümmern) - konkret:
for /f "delims=" %%i in ('dir /s /b /a-d "E:\PFAD\a.txt"') do @echo %%~dpi
Abgesehen davon würde ich "Pfad" trotzdem nicht so eng auslegen und daher eher "%%~dpi" verwenden ...

... was allerdings beides letztlich nur webtrajo (BTW: Willkommen im Forum!) wirklich wissen kann.

Grüße
bastla

P.S.: "unique" je Verzeichnis sollten Dateien namens "a.txt" eigentlich ohnehin sein ...
Bitte warten ..
Mitglied: Biber
26.04.2010 um 16:19 Uhr
Moin bastla und edepfau,

Zitat von bastla:
@edepfau
Schaut auch lustig aus, wenn Du
for /R E:\PFAD %i in (ichbinnichtda.txt) do @echo %i 
> 
draus machst ...
Zitat von edepfau:
das scheint eine Eigenart der for-Schleife zu sein..kann aber sehr einfach durch
01.
> for /R E:\PFAD %i in (a.txt) do @if exist %i echo %~pi 
02.
> 
behoben werden.
Nun macht mal nicht die jungen Nachwuchstalente nervös.
So schlimm haben es die RedmonderInnen ja auch nicht zusammenphantasiert.

Der oben von bastla angesprochene Effekt tritt natürlich nur auf, wenn man/frau es zulässt - dadurch, dass eine Datei EXAKT gesucht / Wildcards weggelassen werden.

Wird der Dateiname "ichBinNichtDa.bla" um ein Wildcard-Fragezeichen z.B am Ende ergänzt, dann kommt kein vermeintlicher Fehlalarm.
Oder nochmal zur Verdeutlichung:
>for /r "." %i in (bla.blubb) do @echo %i 
.... 
D:\temp\test\texte\bla.blubb 
D:\temp\test22\bla.blubb 
D:\temp\test222\bla.blubb 
D:\temp\testheute\bla.blubb 
.... 
.....{ gibt es natürlich nirgends, aber 57 Unterverzeichnisse werden aufgelistet } 
 
>for /r "." %i in (bla.blubb?) do @echo %i 
{ keine einzige Zeile Output .... as should do...} 
-- 
-- Gegenprobe mit EXISTIERENDEN Dateien: mit und ohne Wildcards: 
-- 
>for /r "." %i in (feef.txt) do @echo %i 
...{Existiert 1x, aber 57 Verzeichnisse werden angelistet} 
>for /r "." %i in (feef.txt?) do @echo %i 
D:\temp\test\feef.txt ----> genau eine Fund-Zeile as should do
Grüße
Biber

P.S.
Der Vorschlag mit "dir /s" hat den Nachteil, dass keine Pfade aufgelistet werden.
Dann könnten wir doch "Dir /s /b" nehmen...,-)
Bitte warten ..
Mitglied: edepfau
26.04.2010 um 16:34 Uhr
01.
>for /r "." %i in (bla.blubb?) do @echo %i 
krank, aber cool; danke, wieder was gelernt.
Ich werde immer noch nicht glücklich mit "dir /s/b". Anders als der OP suche ich nämlich gleich nach einem wildcard (*.log), nach der Überlegung "kann er wildcard, kann er auch exakte Namen". Dann brauche ich aber ein uniq hinterher, um mehrfache Pfade auszusieben.
Ist doch gelungen, oder? (uniq meine ich)

Gruss,
Ede
Bitte warten ..
Mitglied: LotPings
26.04.2010 um 16:53 Uhr
Zitat von edepfau:
Dann brauche ich aber ein uniq hinterher, um mehrfache Pfade auszusieben.
Ist doch gelungen, oder? (uniq meine ich)
Hallo Ede,

wenn man mal vom didaktischen Nutzen der Variable "_this" absieht ließe sich das kürzer formulieren:
:COMP 
if defined _last if "%_last%"=="%~1%" Goto :eof 
echo.%~1 
set "_last=%~1"
Gruß
LotPings
Bitte warten ..
Mitglied: edepfau
26.04.2010 um 17:09 Uhr
Hallo LotPings,

ja, viel klarer jetzt:
01.
:UNIQ 
02.
if defined _last if "%_last%"=="%~1" goto :EOF 
03.
echo %~1 
04.
set "_last=%~1" 
05.
goto :EOF
In der Zeile 2 war noch ein "%" zuviel. Der Code wird jetzt auch etwas schneller laufen, weil weniger shells gestartet werden müssen.

Falls der OP noch mitliest: im Batchfile weiter oben muss jetzt natürlich CALL :UNIQ stehen.

NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?
Bitte warten ..
Mitglied: LotPings
26.04.2010 um 17:27 Uhr
Zitat von edepfau:
NB: "echo.%var" und "echo %var" sind äquivalent, oder kenne ich da was noch nicht?
Alte (gute) Gewohnheit, wenn eine Variable keinen Inhalt hat, verhindert der Punkt das Echo den Satus [ON|OFF] zurückgibt.

Gruß
LotPings
Bitte warten ..
Mitglied: bastla
26.04.2010 um 17:45 Uhr
... verhindert der Punkt das Echo den Satus [ON|OFF] zurückgibt.
... es darf aber zB auch ein "\", ein "," oder ein ";", oder wenn Du magst auch ein "+" sein - so, wie eben bei Bedarf auch eine Leerzeile erzeugt werden kann ...
---
So schön die "UNIQisierung" inzwischen auch umgesetzt ist - ich sehe in diesem Fall weiterhin keine Notwendigkeit dafür (es sei denn, webtrajo hätte tatsächlich mehrere "a.txt" in einem Verzeichnis versammelt ) ...

Grüße
bastla
Bitte warten ..
Mitglied: LotPings
26.04.2010 um 18:00 Uhr
Zitat von bastla:
... es darf aber zB auch ein "\", ein "," oder ein ";", oder wenn Du magst auch ein "+" sein - so, wie eben bei Bedarf auch eine Leerzeile erzeugt werden kann ...
Wenn schon, denn schon ":" und "/" tun es auch.
Im Usenet gab es mal eine Untersuchung dazu, welche der Trenner schneller verarbeitet wurden, aber bei der Geschwindigkeit heutiger CPUs ist das marginal.

Gruß
LotPings
Bitte warten ..
Mitglied: Biber
26.04.2010 um 18:04 Uhr
[OT] @bastla
Zitat von bastla:
es sei denn, webtrajo hätte tatsächlich mehrere "a.txt" in einem Verzeichnis versammelt ) ...

Ich nehme doch stark an, dass so ein 64bit-Win7-OktaCore-Bolide auch Dateien in 3 oder 4 Dimensionen stapeln kann, oder?

Sonst hätten wir doch alle immer noch mit Windows XP mailen und Solitaire spielen können...

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: bastla
26.04.2010 um 18:05 Uhr
[OT]
@LotPings
Ja willst Du denn Biber gar nix mehr übrig lassen?

Grüße
bastla
[/OT]
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...