Starter Menü - Pfade mehrerer Dateien an ein Skript übergeben

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
ninon
New Member
New Member
Posts: 1
Joined: 2022-09-11, 19:49 UTC

Starter Menü - Pfade mehrerer Dateien an ein Skript übergeben

Post by *ninon »

Hallo :D
Ich habe eine Frage zur Übergabe von Pfaden im Starter Menü.
Hier ein Beispiel - ein simpler Batch, der die Argumente wieder gibt:

test.bat
@echo off
echo %*
pause

Diesen habe ich im Starter Menü hinterlegt:

Kommando: ......\test.bat
Parameter: %P%N
Startpfad: %P

Wenn ich jetzt mehrere Dateien markiere, wird mir nur die zuletzt markierte Datei angezeigt....!?
Ich möchte aber gerne alle Argumente (Dateipfade) übergeben.
Was mache ich falsch?

LG,
ninon
User avatar
Dalai
Power Member
Power Member
Posts: 9364
Joined: 2005-01-28, 22:17 UTC
Location: Meiningen (Südthüringen)

Re: Starter - Pfade übergeben

Post by *Dalai »

%P%N ist der Platzhalter für den absoluten Pfad des Objekts unter dem Cursor. Für selektierte Dateien braucht es andere Platzhalter wie %S oder besser %L oder noch besser %WL bzw. %UL.

Ich rate von der Verwendung von %S ab, weil die Kommandozeile auf 8191 Zeichen begrenzt ist und weil mit %S absolute Pfade übergeben werden, wird das sehr schnell zu knapp. Mit einer Listendatei (%L, %UL, %WL) gibt es keine solchen Grenzen.

Grüße
Dalai
#101164 Personal licence
Ryzen 5 2600, 16 GiB RAM, ASUS Prime X370-A, Win7 x64

Plugins: Services2, Startups, CertificateInfo, SignatureInfo, LineBreakInfo - Download-Mirror
User avatar
Stefan2
Power Member
Power Member
Posts: 4133
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Starter - Pfade übergeben

Post by *Stefan2 »

Hallo ninon, willkommen im Forum.


Die Liste, welche durch einen der %L -Parameter erzeugt wird, muss dann innerhalb der Batch in einer Schleife abgearbeitet werden.

Dies kann durch eine beliebige Skriptsprache erledigt werden (MS-DOS Batch, JS, PowerShell, AutoHotkey,...)
Davon gibt es bereits einige Beispiele im Forum...



Hier mal eine Batch für einfache Sachen, da du ebenfalls mit einer Batch angefangen hast (heutzutage wäre posh die bessere Wahl):

ForEachFileFrom_L_Do.cmd

Code: Select all

@ECHO OFF 
REM Batch script "For_Each_Selected_File_Do.cmd" by Stefan, 2017-07-24, v0.01
REM
REM Use from a Total Commander Button:
REM Command:   "D:\rive\path to this\batch.cmd"
REM Parameter: "%L"   (((see TC help for more)))
REM Start path:
REM Icon file: cmd.exe    (((or wcmicons.dll)))
REM
REM Usage: select a few files and execute the button.
REM
REM
REM THE CODE
ECHO Found TC's %%L-temp file: %1
ECHO Start reading  the temp file... and do something for each file:
ECHO ******************************************
for /f "delims=" %%L in ('type %1') do (
    REM For Each Line (=File) in temp file DO:
    REM (modify this part for your task)
    ECHO Processing "%%L"
    ECHO Drive: %%~dL
    ECHO PATH: %%~dpL
    ECHO NAME: %%~nxL
    ECHO BASE: %%~nL
    ECHO EXTe: %%~xL
    ECHO File %%~nxL done. Go to next...
ECHO ******************************************
)
ECHO.
ECHO All Done!
PAUSE


Die Batch kann schon bei Umlauten Probleme machen, und man muss ein CHCP Befehl einbauen.
chcp 1252
chcp 65001



Für Infos über die Parameter des TCs, klicke mit rechts auf einen Button und wähle "Ändern", dann rufe dort die Hilfe auf.


 
Post Reply