windows - Indstil batchkommandolinje som streng inden for en anden kommandolinje

Indlæg af Hanne Mølgaard Plasc

Problem



Som titlen Foreslår, forsøger jeg at indstille en kommandolinjeproduktion som en streng inden for en anden kommandolinje.


Eksempel:



  pakke \%\% ~ ni \%\% ~ xi/s desc \%\% ~ ni/s kommentar \%\% ~ ni/pv 'call jrepl
  '[[0-9]] +. [[0-9]] +. [[0-9]] +. [[0-9]] +' ''/match/s\% filnavn\% '




Bemærk, at:


call jrepl "[0-9]+.[0-9]+.[0-9]+.[0-9]+" "" /match /s \%filename\%


er en anden kommando, der udsender: 1.2.3.4 [[Det er en funktion, der ekstraherer tal fra et filnavn]]


Så jeg har brug for denne output til sådan:


pakke \%\% ~ ni \%\% ~ xi/s desc \%\% ~ ni/s kommentar \%\% ~ ni/pv 1.2.3.4


Her deler jeg hele min kode, så du får ideen:


@ECHO OFF
SETLOCAL
set file=C:UsersJackDesktopFiles*
set dot=.
FOR \%\%i IN ("\%file\%") DO (
set filedrive=\%\%~di
set filepath=\%\%~pi
set filename=\%\%~ni
set fileextension=\%\%~xi
:: This Line is supposed to store jrepl command as a string ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SET COMMAND="call jrepl "[0-9]+.[0-9]+.[0-9]+.[0-9]+" "" /match /s \%filename\%"
:: Extract the string and print to the screen
verpatch \%\%~ni\%\%~xi  /s desc \%\%~ni /s comment \%\%~ni /pv \%COMMAND\%
pause
)

pause


jrepl er regex tekstbehandler batch funktioner fil JREPL.BAT af dbenham [9]


Dette er min anden forsøg på at gemme kommandoen for at linje ind som en variabel:


@ECHO OFF
setlocal enabledelayedexpansion
set "file=C:UsersJackDesktopFiles*"
FOR \%\%i IN ("\%file\%") DO (
set filedrive=\%\%~di
set filepath=\%\%~pi
set filename=\%\%~ni
set fileextension=\%\%~xi
: Save Command Line as a variable
for /f "delims=" \%\%a in ('call jrepl "[0-9]+.[0-9]+.[0-9]+.[0-9]+" "" /match /s \%\%~ni') do @set theValue=\%\%a 
verpatch \%\%~ni\%\%~xi  /s desc \%\%~ni /s comment \%\%~ni /pv \%theValue\%
pause
)
pause


Jeg har en folder fuld af mine personlige programmer



  ProgramOne 1.2.3.4.exe

  
  ProgramTwo 2.2.2.2.exe

  
  etc.



og jeg forsøger at lave et parti, der udpakker Programnavn og Version fra disse programmer og har dem indsat i individuelle kommandolinjer, for eksempel:


pakke 'ProgramOne 1.2.3.4.exe'/s desc ProgramOne/s kommentar ProgramOne/pv 1.2.3.4

Bedste reference


Prøv dette, Jeg antager, at både dine verpatch og JREPL kommandoer er korrekte, (jeg har aldrig brugt dem) :


@Echo Off
Set "filelocn=C:UsersJackDesktopFiles"
For \%\%A In ("\%filelocn\%*.exe") Do (For /F \%\%B In (
        'jrepl "[0-9]+.[0-9]+.[0-9]+.[0-9]+" "" /match /s \%\%~nA') Do (
        verpatch "\%\%A" /s desc "\%\%~nA" /s comment "\%\%~nA" /pv \%\%B
        Pause))


Rediger


Baseret på din angivne filnavnstrategi og uden brug af JREPL kan dette virke for dig:


@Echo Off
Set "filelocn=C:UsersJackDesktopFiles"
Set "progName="
For \%\%A In ("\%filelocn\%*.exe") Do (SetLocal EnableDelayedExpansion
    For \%\%B In (\%\%~nA) Do If Not Defined progName (Set "progName=\%\%B"
    ) Else Set "fileVer=\%\%B"
    verpatch "\%\%A" /s desc !progName! /s comment !progName! /pv !fileVer!
    EndLocal)