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

Printed on: April 24, 2024 at 10:04 o'clock

Mitglied: 145033
145033 Aug 02, 2020 at 12:58:14 (UTC)
Goto Top
for /f "delims=" %%a in ("c:\pfad\datei.txt") do set "pfad=%%~dpa"  
echo %pfad%
Member: snugg123
snugg123 Aug 02, 2020 at 13:02:55 (UTC)
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
Solution 145033 Aug 02, 2020 updated at 13:05:46 (UTC)
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%
Member: snugg123
snugg123 Aug 02, 2020 at 13:06:41 (UTC)
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
Solution 145033 Aug 02, 2020 updated at 13:09:17 (UTC)
Goto Top
Du hast ja Klammern und Anführungszeichen vergessen, bitte noch mal ganz genau
meinen letzen Post anschauen!!!!

Man oh maaaaan.
Member: snugg123
snugg123 Aug 02, 2020 at 13:09:19 (UTC)
Goto Top
Ja super klappt jetzt!

Vielen Dank

for /f "delims=" %%a in ("%variable%") do set "pfad=%%~dpa"
echo %pfad%
Mitglied: 145033
145033 Aug 02, 2020 updated at 13:13:02 (UTC)
Goto Top
Und damit du auch was lernst und nicht nur Copy n pastest bitte
Tutorial zur FOR-Schleife
lesen.
Member: snugg123
snugg123 Aug 02, 2020 updated at 13:46:47 (UTC)
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 Aug 02, 2020 updated at 14:35:43 (UTC)
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.
Member: snugg123
snugg123 Aug 02, 2020 at 15:49:52 (UTC)
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