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
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: 3uf0rd

3uf0rd (Level 1) - Jetzt verbinden

31.01.2007, aktualisiert 02.02.2007, 4663 Aufrufe, 16 Kommentare

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
Mitglied: miniversum
31.01.2007 um 18:12 Uhr
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
Bitte warten ..
Mitglied: bastla
31.01.2007 um 20:12 Uhr
@miniversum

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

Grüße
bastla
Bitte warten ..
Mitglied: Biber
31.01.2007 um 20:25 Uhr
@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...


@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
Bitte warten ..
Mitglied: bastla
31.01.2007 um 20:32 Uhr
@Biber

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

Grüße
bastla
Bitte warten ..
Mitglied: miniversum
31.01.2007 um 20:36 Uhr
@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
Bitte warten ..
Mitglied: bastla
31.01.2007 um 20:41 Uhr
@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
Bitte warten ..
Mitglied: 3uf0rd
31.01.2007 um 20:47 Uhr
...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?
Bitte warten ..
Mitglied: miniversum
31.01.2007 um 20:48 Uhr
ok. Mea Culpa. Wußt ich nicht.
Wieder was gelernt.

miniversum
Bitte warten ..
Mitglied: bastla
31.01.2007 um 20:56 Uhr
@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 - daher die etwas restringierte Form meiner Antworten - entschuldige bitte) ...

Grüße
bastla
Bitte warten ..
Mitglied: 3uf0rd
31.01.2007 um 20:56 Uhr
bzw.

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

Ist set LW=C: nicht auch auf folgende Laufwerke anzuwenden ( also D:, E:, F
Sollten diese nicht vorhanden sein, auslassen bei der suche.
Bitte warten ..
Mitglied: bastla
31.01.2007 um 21:07 Uhr
Hallo 3uf0rd!

So könnte es gehen (die übrigen Laufwerksbuchstaben musst Du selbst hinzufügen ):
01.
@echo off 
02.
set /a Anzahl=0 
03.
for %%a in (C D E F G H) do ( 
04.
	for /f "delims=" %%i in ('dir /s /b /ad %%a:\*YourFolder* 2^>nul') do set "YFPfad=%%i" & set /a Anzahl+=1 
05.
06.
echo Gefundener Pfad: %YFPfad% 
07.
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]
Bitte warten ..
Mitglied: Biber
31.01.2007 um 21:10 Uhr
@3uf0rd
Ist set LW=C: nicht auch auf folgende Laufwerke anzuwenden ( also D:, E:, F
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
Bitte warten ..
Mitglied: miniversum
31.01.2007 um 21:11 Uhr
@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
Bitte warten ..
Mitglied: 3uf0rd
01.02.2007 um 16:56 Uhr
... 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 :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
Bitte warten ..
Mitglied: Biber
01.02.2007 um 17:08 Uhr
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.. ]

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
Bitte warten ..
Mitglied: 3uf0rd
02.02.2007 um 05:57 Uhr
... alles klar Biber !

-----> blutiger anfänger bin ; )

Gruss
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...