3uf0rd
Goto Top

... suche einen Ordner XXX dessen Pfad sich ändern kann...

Hallo ...
... ich würde gern meine Batch erweitern um ihre Anwendung zu vereinfachen.
Bis jetzt muss ich sie öffnen und eingenhändig einen Pfad angeben. So etwa -->
@echo off & setlocal
:: type "YourFolder" Path -------->>
set "Incoming=D:\YourFolder"
if not exist %YourFolder% goto :eof
Diese Eingabe will ich mir sparen und nach dem Ordnernamen (hier "YourFolder") suchen lassen.
Der Pfad ist mir unbekannt und könnte sich eventuel von mal zu mal ändern.

... ich komm einfach net druff ; (

... also wär schön wenn einer eine Idee hätte.

Greetz 3uf0rd

Content-Key: 50347

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

Printed on: April 23, 2024 at 09:04 o'clock

Member: miniversum
miniversum Jan 31, 2007 at 17:12:03 (UTC)
Goto Top
Vielleicht Hilft dir das weiter:

@echo off
set LW=C:
set folder=temp
pushd %LW%
cd\\

for /f "delims=" %%i in ('dir /s /b %folder%') do echo gesuchter Ordner ist in %%~dpi
popd

miniversum
Member: bastla
bastla Jan 31, 2007 at 19:12:44 (UTC)
Goto Top
@miniversum

Nur interessehalber - wozu das "pushd" / "popd"? Ich hätte gedacht,
@echo off
set LW=C:
set folder=temp
for /f "delims=" %%i in ('dir /s /b "%LW%\%folder%"') do echo gesuchter Ordner ist in %%~dpi  
würde genügen ...

Grüße
bastla
Member: Biber
Biber Jan 31, 2007 at 19:25:04 (UTC)
Goto Top
@bastla
Genau, und da die Variablen nicht als "setlocal" deklariert sind, hat man/frau sie auch noch später zur Verfügung, falls vergessen wurde, wo gesucht wurde...

Sonst würde sich der ganze Aufwand ja auch gar nicht lohnen mit der Variablendefinition...
face-wink

@3uf0rd
Ich denke, dass die Aufgabe (relativ) unlösbar ist, solange nicht wenigstens von dem gesuchten Ordner sicher bekannt ist, dass er
- entweder immer auf einem bestimmten Laufwerk/unterhalb eines bestimmten Verzeichnisses liegt
- oder dass dieser Ordner auf allen vorhandenen Platten einen ein-eindeutigen Namen hat

Wenn Du nicht wenigstens eine diese Vorgaben erfüllen kannst, wirst Du den Batch interaktiv ("SET /P Startpfad=Ab welchem Lw/Pfad soll gesucht werden?") aufbauen müssen.

Grüße
Biber
Member: bastla
bastla Jan 31, 2007 at 19:32:12 (UTC)
Goto Top
@Biber

Bei einem (derart kurzen) Oneliner mit besserer Wartbarkeit zu argumentieren, würde mir nie einfallen ... face-wink

Grüße
bastla
Member: miniversum
miniversum Jan 31, 2007 at 19:36:08 (UTC)
Goto Top
@bastla
Angenommen ich bin in einem Unterverzeichnis eines Laufwerkes und suche den Ordner in einem Andern Verzeichnis oder andern Laufwerk. So springe ich halt dan mit pushd schnell mal auf das gesuchte Laufwerk suche was ich brauche udn wechsle mit popd zurück. das cd\ ist dann dafür wenn auf dem Gleichen laufwerk gesucht wird. Ist einfach einfacher (oder wie geht der Spruch?)
Bei dienem Code gehst du ja davon aus das der Ordner direkt im Root-Verzeichnis liegt. ist das ncith der fall würde er nix finden oder?

@Biber
Klar muß es Eindeutig sein. Davon bin ich einfach mal ausgegangen. sonst würde ja jede andere Suchfunktion auch versagen.

miniversum
Member: bastla
bastla Jan 31, 2007 at 19:41:19 (UTC)
Goto Top
@miniversum

Bei dienem Code gehst du ja davon aus das der Ordner direkt im Root-Verzeichnis liegt.
Nein.
ist das ncith der fall würde er nix finden oder?
Doch.

Grüße
bastla
Member: 3uf0rd
3uf0rd Jan 31, 2007 at 19:47:39 (UTC)
Goto Top
...wow fix !
...vielen dank vorab !

Also der Ordner "YourFolder" ändert nie seinen Namen.
Es ist ehr dafür gedacht die Batch auf einem anderen unbekannten System zu nutzen.Bei dem das Dateisystem anders angeordnet ist.

Könnte ich nicht nach "YourFolder" als Zeichenfolge in vorhandenen Ordnern suchen?
Member: miniversum
miniversum Jan 31, 2007 at 19:48:33 (UTC)
Goto Top
ok. Mea Culpa. Wußt ich nicht.
Wieder was gelernt.

miniversum
Member: bastla
bastla Jan 31, 2007 at 19:56:13 (UTC)
Goto Top
@miniversum

Ich hatte mich anfangs nur gewundert und gedacht, vielleicht selbst etwas lernen zu können (und danach meine Version zur Sicherheit schon getestet gehabt face-wink - daher die etwas restringierte Form meiner Antworten - entschuldige bitte) ...

Grüße
bastla
Member: 3uf0rd
3uf0rd Jan 31, 2007 at 19:56:34 (UTC)
Goto Top
bzw.

@echo off
set LW=C:
set folder=temp
pushd %LW%

Ist set LW=C: nicht auch auf folgende Laufwerke anzuwenden ( also D:, E:, Fface-smile
Sollten diese nicht vorhanden sein, auslassen bei der suche.
Member: bastla
bastla Jan 31, 2007 at 20:07:59 (UTC)
Goto Top
Hallo 3uf0rd!

So könnte es gehen (die übrigen Laufwerksbuchstaben musst Du selbst hinzufügen face-wink):
@echo off
set /a Anzahl=0
for %%a in (C D E F G H) do (
	for /f "delims=" %%i in ('dir /s /b /ad %%a:\*YourFolder* 2^>nul') do set "YFPfad=%%i" & set /a Anzahl+=1  
)
echo Gefundener Pfad: %YFPfad%
echo Fundstellen insgesamt: %Anzahl%
Die Variable %YFPfad% kannst Du dann entsprechend weiterverwenden, aber, entsprechend Biber's Einwand weiter unten, hast Du nur Sicherheit, wenn die Variable %Anzahl% den Wert 1 enthält.
Im Übrigen würde ich Biber's Vorschläge wesentlich eher ernst nehmen, als diese (zumindest von mir) sportlich gemeinte Batch-Variante.

Grüße
bastla

[Edit] Zähler eingebaut. [/Edit]
Member: Biber
Biber Jan 31, 2007 at 20:10:19 (UTC)
Goto Top
@3uf0rd
Ist set LW=C: nicht auch auf folgende Laufwerke anzuwenden ( also D:, E:, Fface-smile
Sollten diese nicht vorhanden sein, auslassen bei der suche.

Jein... genau das Problem meinte ich vorhin.

Natürlich kannst Du auch auf mehreren Laufwerken nach "YourFolder" suchen (siehe unten bei miniversum).
Solange Du dann insgesamt nur einen YourFolder-Ordner findest, alles prima.

Problem ist: Die Wahrscheinlichkeit steigt, dass Du mehrere "YourFolder"s findest, weil
-der Anwender eine Version 1.2 Deiner App auf c: installiert hat und gerade aber noch auf Laufwerk D: die App 1.3beta ausprobiert...
- der Anwender jeden Freitag abend das komplette Laufwerk C: nach d:\Archiv sichert.


und noch 20 weitere Gründe, die dazu führen können, dass es mehrere "YourFolder" gibt.

Deshalb die Pest-oder-Cholera-Alternative:
- entweder den Benutzer fragen, wo denn gesucht werden soll
- oder irgendwo EINdeutig hinterlegen, wo denn der benutzte aktuelle relevante YourFolder-Pfad ist.

Variante zwei ist die, die die meisten Erwachsenen vorziehen...
-->Registrywert oder Umgebungsvariable für YourFolder setzen.

Gruß
Biber
Member: miniversum
miniversum Jan 31, 2007 at 20:11:11 (UTC)
Goto Top
@bastla
Ist ja ok. jeder kann ja mal daneben liegen. Und funktionieren tuts ja so oder so...

@3uf0rd
klar kansnt du auch nach "YourFolder" suchen. ichhabe in meinem Beispiel halt nach "temp" gesucht. also ersetzt du mein "temp" duch dein "YourFolder".
Das beispiel ist nur für ein laufwerk. willst du alle durchsuchen müßtest du das in einer Forschleife tun.

@echo off
set folder=YourFolder
for %%L in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
if exist %%L (
for /f "delims=" %%i in ('dir /s /b "%%L\%folder%"') do echo gesuchter Ordner ist in %%~dpi
)
)

miniversum
Member: 3uf0rd
3uf0rd Feb 01, 2007 at 15:56:17 (UTC)
Goto Top
... also miniversum das gewünschte ergebnis bekomm ich noch nicht hin, allerdings hat Biber wohl recht ---> das dies noch andere Probs mit sich zieht.
Habe mich darum entschlossen etwas wie zb. WinScript zu nutzen. In dem der Benutzer die Eingabe über eine Query Folder Box tätigt ... quasi mit einer art .log Datei die Eingabe speichert.
Das wollte ich vermeiden jedoch erscheint es als saubere Lösung.
Dank euch für die Unterstützung !
Wenn jemand Interesse an einer Batch hat, die einen Ordner nach Files durchsucht und falls diese vorhanden sind kurz abwartet und dann verschiebt + Vorgang loggt --->
Mein Weg bis hier hin (bei mit geht es)

@echo off & setlocal
:: type Incoming Folder Path --------------------------->>
set "Incoming=D:\Incoming"
if not exist %Incoming% goto :eof
if exist %Incoming% dir /b /A:-d %Incoming%>nul 2>nul && goto :m0ve
:m0ve
if not exist %Incoming%\IncomingSave md %Incoming%\IncomingSave
set "SaveIncoming=%Incoming%\IncomingSave"
ping -n 40 localhost > NUL
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%
set hour=%time:~0,2%
set minute=%time:~3,2%
echo ------------------------------------------------->> %SaveIncoming%\m0veInfo.log
echo : %year%/%month%/%day% - %hour%:%minute% >>%SaveIncoming%\m0veInfo.log
move /Y %Incoming%\*.* %SaveIncoming% >> %SaveIncoming%\m0veInfo.log
:eof

Grüße 3uf0rd
Member: Biber
Biber Feb 01, 2007 at 16:08:12 (UTC)
Goto Top
Moin 3uf0rd,

danke für's Posten Deiner Lösung.

Anmerkung: diese beiden Zeilen könnten entfallen (kein sittlicher Nährwert):
if exist %Incoming% dir /b /A:-d %Incoming%>nul 2>nul && goto :m0ve
:m0ve

[Gehässige Anmerkung II: der entstandene freie Platz könnte für Kommentarzeilen genutzt werden.. face-wink ]

Wenn es Dir Recht ist und der Beitrag auch aus Deiner Sicht gelöst ist, würde ich den gerne schließen. Werde einen "grünen Haken" als entsprechendes Signal werten...

Gruss
Biber
Member: 3uf0rd
3uf0rd Feb 02, 2007 at 04:57:47 (UTC)
Goto Top
... alles klar Biber !

> blutiger anfänger bin ; )

Gruss