zeroblue2005
Goto Top

Ordnerpfad ermitteln, was stimmt hier nicht?

Hallo Zusammen,

ich brauche genau das hier, aber mit den Schleifen tu ich mich immer schwer, daher bitte ich um ein wenig Hilfe bei der Anpassung. Auf einem Rechner gibt es den Pfad "E:\Test\Bilder" diesen möchte ich suchen lassen und eine Variable daraus generieren für den restlichen Teil meiner Batch. Nur irgendwie bekomme ich es nicht hin:

set "Ordner=Bilder"  
for %i in ("%Ordner%") do Dir /s /b /ad "%~i" | findstr /e /i "\%~nxi"  
xcopy C:\test.jpg %Ordner% /y
pause

Zielsetzung ist die Festplatten C D und E zu durchsuchen...

Danke

Content-ID: 597488

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

Ausgedruckt am: 22.11.2024 um 02:11 Uhr

erikro
Lösung erikro 19.08.2020 aktualisiert um 20:48:45 Uhr
Goto Top
Moin,

Zitat von @zeroblue2005:

> set "Ordner=Bilder"  
> for %i in ("%Ordner%") do Dir /s /b /ad "%~i" | findstr /e /i "\%~nxi"  
> 

Was genau soll die zweite Zeile tun? Was sie tut ist, dass sie im aktuellen Pfad einen Ordner names "Bilder" durchsucht (von dem ich vermute, dass es den nicht gibt) und darin dann nach einem String, der in einer uns unbekannten Variablen %nxi steht.

Ich würde das Problem sowieso mit der Powershell lösen. face-wink

Liebe Grüße

Erik
zeroblue2005
zeroblue2005 19.08.2020 um 21:03:04 Uhr
Goto Top
Hi Erik,

ja ich weiss, aber ich bin halt vom alten Schlag und komme einfach mit Batch gut klar, nur die blöden Schleifen bringen mich um den Verstand.

Zu Thema. Ich habe ne Lösung gefunden. Das geht bestimmt viel einfacher, aber so klappt es:

:: Suche Userpfad
if exist "C:\%userprofile%\Documents\" (set "UserPfad=%userprofile%\Documents")  
cls
@echo Pfade ist: %UserPfad%


if exist "D:\%username%\Documents\" (set "UserPfad=D:\%username%\Documents")  
cls
@echo Pfade ist: %UserPfad%


if exist "E:\%username%\Documents\" (set "UserPfad=E:\%username%\Documents")  
cls
@echo Pfade ist: %UserPfad%


:: Befehl
xcopy C:\test.txt %UserPfad% /y

pause

Es gibt immer nur diese drei Möglichkeiten, daher wäre das für mich praktikabel...
erikro
erikro 19.08.2020 um 21:11:17 Uhr
Goto Top
Moin,

Zitat von @zeroblue2005:
ja ich weiss, aber ich bin halt vom alten Schlag und komme einfach mit Batch gut klar, nur die blöden Schleifen bringen mich um den Verstand.

Ja, weil die in Batches auch nicht wirklich funktionieren. Batch-Schleifen sind gruselig. Das geht ja in Assembler leichter. face-wink

> :: Suche Userpfad
> if exist "C:\%userprofile%\Documents\" (set "UserPfad=%userprofile%\Documents")  
> 

Nö.

C:\Users\meier>echo %userprofile%
C:\Users\meier

C:\Users\meier>echo "C:\%userprofile%"  
"C:\C:\Users\meier  

Der LW-Buchstabe ist da schon mit bei. face-wink

hth

Erik
zeroblue2005
zeroblue2005 19.08.2020 um 21:14:24 Uhr
Goto Top
Stimmt, da habe ich gepennt...
Kartoffelpelle
Kartoffelpelle 20.08.2020 um 12:13:38 Uhr
Goto Top
sowas?

ggf. mehrfach ausführen und c:\ in d:\ und e:\ ändern

for /f %i in ('cmd /c dir c:\ /s /b /ad ^| find /i "\bilder"') do set bilderordner=%i  
echo %bilderordner%

VG
zeroblue2005
zeroblue2005 20.08.2020 um 12:23:54 Uhr
Goto Top
Ja, so gehts auch. Wenn du mir jetzt noch sagst, warum deine for schleife nur geht, wenn ich die in der Konsole ausführe und nicht in einer Batch?
Danke
Kartoffelpelle
Kartoffelpelle 20.08.2020 um 13:22:39 Uhr
Goto Top
die "%-Zeichen" müssen Escaped werden, wenn sie aus dem Skript heraus aufgerufen werden.

for /f %%i in ('cmd /c dir c:\ /s /b /ad ^| find /i "\bilder"') do set bilderordner=%%i  
echo %bilderordner%

pause
zeroblue2005
zeroblue2005 20.08.2020 aktualisiert um 20:55:29 Uhr
Goto Top
Danke läuft...

Aber leider noch nicht ganz richtig. Ist der Suchordner mit Daten gefüllt, findet er immer die letze Datei im Ordner und nicht den Ordner selbst...

for /f %%i in ('cmd /c dir e:\ /s /b /ad ^| find /i "\%username%\documents"') do set pfad=%%i  
echo Pfad ist: %pfad%
pause

Raus kommt dann bei mir...

Pfad ist: e:\test.user\Documents\Testdatenbestand-klein\XLS

So wäre aber richtig...
Pfad ist: e:\test.user\Documents
Kartoffelpelle
Lösung Kartoffelpelle 21.08.2020 aktualisiert um 11:43:14 Uhr
Goto Top
Ich habe dein Problem nicht ganz verstanden, jedenfalls finde ich deinen Ansatz grundsätzlich nicht schlecht. Folgender Vorschlag:
@echo off

rem Suche Userpfad
if exist "%userprofile%\Documents\" set "UserPfad=%userprofile%\Documents"  
if exist "D:\%username%\Documents\" set "UserPfad=D:\%username%\Documents"  
if exist "E:\%username%\Documents\" set "UserPfad=E:\%username%\Documents"  

if x%UserPfad% neq x (
    echo Pfade ist: %UserPfad%
    ) else (
    echo Kein Pfad gefunden
    goto DoNotCopy
    )

rem Befehl
xcopy C:\test.txt %UserPfad% /y

:DoNotCopy

pause

Sonst, wenn du es unbedingt mit einer For-Schleife machen willst, kannst du dir auch nochmal folgendes anschauen (ist aber Vergleichsweise deutlich weniger performant weil die ganze Festplatte durchsucht wird):
for /f "tokens=1,2,3 delims=\" %i in ('cmd /c dir C:\ /s /b /ad ^| find /i "\%username%\documents"') do set pfad=%i\%j\%k  
zeroblue2005
zeroblue2005 21.08.2020 um 11:44:41 Uhr
Goto Top
Alles gut. Ich habe das auch schon umgesetzt. Wollte Schleifen Lösung aber nicht ausser acht lassen.

Danke