FOR Variable nur letzter Ordner
Hallo zusammen,
ich möchte mit PneumaticTube Daten auf meine Dropbox laden.
Der Programmierer hat mir dann vorgeschlagen ich soll es mittels for Schleife machen, allerdings war es noch sehr unausgegoren.
Ich stocke aber dabei die FOR Variable auf den letzen Ordner zu beschränken.
Hier mal mein bisheriger Ansatz
Allerdings passt die %path% variable nicht, ich müsste eigentlich %~dpa um %lenvar% kürzen, sowas wie !~dpa:~%lenvar%
Gibts da eine Lösung?
Danke!
LG mcdy
ich möchte mit PneumaticTube Daten auf meine Dropbox laden.
Der Programmierer hat mir dann vorgeschlagen ich soll es mittels for Schleife machen, allerdings war es noch sehr unausgegoren.
Ich stocke aber dabei die FOR Variable auf den letzen Ordner zu beschränken.
Hier mal mein bisheriger Ansatz
@echo off
setlocal enabledelayedexpansion
set plex_dir=C:\SecureWAMP\htdocs\plex\
set path=C:\SecureWAMP\htdocs\plex\plex-data\
echo %plex_dir%>%temp%/lenvar.tmp
for %%i in ("%temp%\lenvar.tmp") do set /a lenvar=%%~zi-2
for /r %plex_dir% %%a in ("*") do C:\portApps\PneumaticTube\PneumaticTube.exe -f %~fa -p \Apps\Pancake.io\medya\!path:~%lenvar%!
Allerdings passt die %path% variable nicht, ich müsste eigentlich %~dpa um %lenvar% kürzen, sowas wie !~dpa:~%lenvar%
Gibts da eine Lösung?
Danke!
LG mcdy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 278527
Url: https://administrator.de/forum/for-variable-nur-letzter-ordner-278527.html
Ausgedruckt am: 22.12.2024 um 17:12 Uhr
6 Kommentare
Neuester Kommentar
Hallo mc-doubleyou!
Soferne ich das richtig verstehe, willst Du einen Pfad wie "C:\SecureWAMP\htdocs\plex\plex-data\Unterordner\UnterUnterordner\" auf "Unterordner\UnterUnterordner\" reduzieren - falls ja, etwa so:
Falls der Backslash am Ende stören sollte, kannst Du alternativ
verwenden.
Das
BTW: %path% solltest Du in einem Batch nur verändern, wenn Du weißt, was Du tust - daher habe ich ersatzweise %plex_path% verwendet ...
Grüße
bastla
Soferne ich das richtig verstehe, willst Du einen Pfad wie "C:\SecureWAMP\htdocs\plex\plex-data\Unterordner\UnterUnterordner\" auf "Unterordner\UnterUnterordner\" reduzieren - falls ja, etwa so:
@echo off & setlocal enabledelayedexpansion
set "plex_dir=C:\SecureWAMP\htdocs\plex\"
set "plex_path=C:\SecureWAMP\htdocs\plex\plex-data\"
for /r %plex_dir% %%a in ("*") do (
set "FullPath=%%~dpa"
set "RelPath=!FullPath:%plex_path%=!"
echo C:\portApps\PneumaticTube\PneumaticTube.exe -f "%%~fa" -p "\Apps\Pancake.io\medya\!RelPath!"
)
pause
echo C:\portApps\PneumaticTube\PneumaticTube.exe -f "%%~fa" -p "\Apps\Pancake.io\medya\!RelPath:~,-1!"
Das
echo
in Zeile 9 sowie die Zeile 11 dienen zum Testen - wenn die ausgegebenen Befehle vernünftig aussehen, kannst Du beide weglassen ...BTW: %path% solltest Du in einem Batch nur verändern, wenn Du weißt, was Du tust - daher habe ich ersatzweise %plex_path% verwendet ...
Grüße
bastla
Hallo mc-doubleyou!
Grüße
bastla
... warum das mit der RelPath Variable funktioniert?
Dafür wird die "Ersetzen"-Funktionalität von set
verwendet - aus der Onlinehilfe:Das Ersetzen von Umgebungsvariablen wurde folgendermaßen erweitert:
%PATH:str1=str2%
Dies erweitert die PATH-Umgebungsvariable, wobei jede Instanz von "str1" im
erweiterten Ergebnis mit "str2" ersetzt wird. "str2" kann die leere
Zeichenfolge sein, um alle Instanzen von "str1" aus der erweiterten Ausgabe zu
löschen. Wenn "str1" mit einem Sternchen beginnt, steht "str1" für alles
zwischen dem Anfang der erweiterten Ausgabe bis zum ersten Auftreten des
übrigen Abschnitts von "str1".
Gibt es auch eine Möglichkeit Dateien auszunehmen?
Nach welchen Kriterien?Grüße
bastla
Moin mc-doubleyou,
zu deinem Kür-Teil der Anforderung....
Wenn du bestimmte Dateinamen von der Verarbeitung ausnehmen willst - es gibt ja eine Stelle in dem breitgekloppten Oneliner, in dem du den Vergleichswert "Dateiname" schon in der Hand hast. Nämlich nach der Klammer-Auf der FOR/F-Anweisung.
Da kannst du nich eine IF-Anweisung unterbringen.
Ungetestet:
Bewirkt: Nur wenn der Dateiname nicht in %ausnahmen% gefunden wird, werden die drei eigentlichen Nutzzeilen in der FOR-Anweisung ausgeführt.
Geht sicherlich eleganter/lesbarer, aber für diese eine Sonderlocke sollte es reichen.
Grüße
Biber
zu deinem Kür-Teil der Anforderung....
Wenn du bestimmte Dateinamen von der Verarbeitung ausnehmen willst - es gibt ja eine Stelle in dem breitgekloppten Oneliner, in dem du den Vergleichswert "Dateiname" schon in der Hand hast. Nämlich nach der Klammer-Auf der FOR/F-Anweisung.
Da kannst du nich eine IF-Anweisung unterbringen.
Ungetestet:
@echo off & setlocal enabledelayedexpansion
set "plex_dir=C:\SecureWAMP\htdocs\plex\"
Set "ausnahmen=cli.php README .jpg"
for /r %plex_dir% %%a in ("*") do (
echo %ausnahmen%|findstr /i /v "%%a">nul && (
set "FullPath=%%~dpa"
set "RelPath=!FullPath:%plex_dir%=!"
C:\portApps\PneumaticTube\PneumaticTube.exe -f "%%~fa" -p "\Apps\Pancake.io\medya\!RelPath!"
)
)
Bewirkt: Nur wenn der Dateiname nicht in %ausnahmen% gefunden wird, werden die drei eigentlichen Nutzzeilen in der FOR-Anweisung ausgeführt.
Geht sicherlich eleganter/lesbarer, aber für diese eine Sonderlocke sollte es reichen.
Grüße
Biber