snugg123
Goto Top

Einen Teil einer Variable wegschnipseln

Hi,

wenn ich einen vollständigen Dateipfad mit dem Dateinamen als Variable habe, z.B.

R:\scan\mueller\frank\scandatei1.pdf

wie kann ich dann den hinteren Teil wegschneiden, so daß nur der Pfad

R:\scan\mueller\frank\

übrigbleibt? Klar könnte man nun die letzten 13 Zeichen einfach wegschneiden. Ich brauche aber eine ganz allgemeine Lösung für verschiedene Dateipfade.

Also praktisch die Anweisung

"Gehe von rechts bis zum ersten Backslash und nimm nur den Teil davor".

Vielleicht kann man das ja auch in der Form machen: "Zähle die Zeichen von ganz rechts bis zum ersten Backslash und nimm diese Zahl "n" dann zum Wegschneiden z.B.

set ziel=%ursprung:~0,-n%

oder so ähnlich.

Wäre super, wenn da jemand helfen könnte

Danke

face-wink

Content-Key: 593152

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

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: 145033
145033 02.08.2020 um 14:58:14 Uhr
Goto Top
for /f "delims=" %%a in ("c:\pfad\datei.txt") do set "pfad=%%~dpa"  
echo %pfad%
Mitglied: snugg123
snugg123 02.08.2020 um 15:02:55 Uhr
Goto Top
Hi,

danke. Ich brauche das aber für eine Variable innerhalb des Scripts, die über den set-Befehl gesetzt wurde.

Hast Du dafür auch die Lösung?

Danke.
Mitglied: 145033
Lösung 145033 02.08.2020 aktualisiert um 15:05:46 Uhr
Goto Top
Zitat von @snugg123:

Hi,

danke. Ich brauche das aber für eine Variable innerhalb des Scripts, die über den set-Befehl gesetzt wurde.

Hast Du dafür auch die Lösung?

Wo ist das Problem??
Einfach die Variable dort einsetzen wo jetzt der Pfad im Klartext steht 🙂

for /f "delims=" %%a in ("%variable%") do set "pfad=%%~dpa"  
echo %pfad%
Mitglied: snugg123
snugg123 02.08.2020 um 15:06:41 Uhr
Goto Top
Also so wie unten geht es leider noch nicht. Da muß noch irgendwo ein Fehler sein....wäre nett wenn Du nochmal helfen würdest.

@echo off

setlocal enabledelayedexpansion

set test="R:\scan\walter\maexchen\kurtchen\bimsen.pdf"

for /f "delims=" %%a in %test% do set "pfad=%%~dpa"

echo %pfad%

pause
Mitglied: 145033
Lösung 145033 02.08.2020 aktualisiert um 15:09:17 Uhr
Goto Top
Du hast ja Klammern und Anführungszeichen vergessen, bitte noch mal ganz genau
meinen letzen Post anschauen!!!!

Man oh maaaaan.
Mitglied: snugg123
snugg123 02.08.2020 um 15:09:19 Uhr
Goto Top
Ja super klappt jetzt!

Vielen Dank

for /f "delims=" %%a in ("%variable%") do set "pfad=%%~dpa"
echo %pfad%
Mitglied: 145033
145033 02.08.2020 aktualisiert um 15:13:02 Uhr
Goto Top
Und damit du auch was lernst und nicht nur Copy n pastest bitte
Tutorial zur FOR-Schleife
lesen.
Mitglied: snugg123
snugg123 02.08.2020 aktualisiert um 15:46:47 Uhr
Goto Top
Hmm..eine Frage doch noch: Bei Pfad- oder Dateinamen mit Sonderzeichen stürzt die Batch vorzeitig ab oder der Pfad wird falsch ausgegeben, z.B. wird bei

set test="r:\scan\Tönjes pp.%% Söhnein Wolpringhausen %% in Möhlbringen-ziel\scan\we\2-erw %% er.pdf"

nur jeweils ein Prozentzeichen erkannt.

Ich habe halt absichtlich problematische Pfade zum Testen genommen um zu sehen wo die Grenzen sind face-wink

Ausrufezeichen geht, weil ich im disabledelayedexpansion-Modus arbeite.

chcp 1252 ist gesetzt, ebenso die Batch als ANSI-codiert.

Kann man das lösen?

Danke.
Mitglied: 145033
145033 02.08.2020 aktualisiert um 16:35:43 Uhr
Goto Top
Erstens setzt du die Anführungszeichen in der Variablen für mein Beispiel oben falsch wodurch sie verdoppelt werden, zweitens Stichwort Escaping
https://www.robvanderwoude.com/escapechars.php
Drittens, heute nutzt man gleich die Powershell statt dem verstaubten Batch.
Mitglied: snugg123
snugg123 02.08.2020 um 17:49:52 Uhr
Goto Top
Wo setze ich denn mehr Anführungszeichen als Du in Deinen Befehlen? Kann ich jetzt nicht erkennen.

Um das Ganze ein wenig schneller zu verstehen, wäre super wenn Du in dem kleinen Beispiel die Escape-Zeichen setzen würdest. Das würde mir echt helfen. Vielen Dank!

@echo off

setlocal enabledelayedexpansion

set test="R:\scan\walter\maexchen\kurtchen\bimsen.pdf"

for /f "delims=" %%a in %test% do set "pfad=%%~dpa"

echo %pfad%

pause