2017-10-11 3 views
0

J'ai besoin de traiter plusieurs paramètres dans un fichier batch. Il peut s'agir d'un paramètre simple ou composite avec un argument et un chemin associé.Si le paramètre contient un séparateur de virgules, le cas échéant, le diviser

Format pour un paramètre composite doit être quelque chose comme: ""ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles""

Je ne peux pas comprendre comment obtenir et définir des valeurs pour ARG et SOURCE.

Ce que j'ai jusqu'à présent:

setlocal enableextensions enabledelayedexpansion  

set sep="," 
set str1=%3 

if not "x!str1:%sep%=!"=="x%str1%" (
    echo found pattern rem gets here with no problem 
    echo 3 is %3 rem output: string is "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles" 
    set sourceString=%3 
    echo "%sourceString%" rem output: "" 

    REM extract source path from argument 
    :nextVar 
    for /F "tokens=1* delims=," %%a in ("%3") do (      
     set %%a 
     echo "%%a" REM output: "ARG CUSTOM_SOURCE SOURCE C:\Folder\OtherFolder\SourceFiles" 
     set sourceString=%%b 
     echo "%%b" "sourceString" REM output: "" ""   
    ) 
    if defined sourceString goto nextVar 
    echo "%ARGS%" "%SOURCE%" REM output: "" "" 
) 

Code pour la chaîne source de division, je suis de cette réponse: https://stackoverflow.com/a/18821153/6385702. Essayé autre option aussi, mais rien ne fonctionne si loin.

Semble, le principal problème que j'ai avec set var=string partie. Même avec enabledelayedexpansion j'obtiens des valeurs vides. Je ne suis pas à l'aise avec les fichiers batch et j'ai vraiment empilé avec celui-ci. Qu'est-ce que j'oublie ici?

EDIT: paramètres sont passés de l'application hta (et peuvent également être transmis à partir de l'invite de commande directement) le format suit: cmd /k myBatch.cmd PARAM REQ_PARAM "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles" OPTIONAL_PARAM

+0

Bon, alors maintenant, ' "ARG = CUSTOM_SOURCE, SOURCE = C: \ Dossier \ OtherFolder \ SourceFiles"' est le troisième argument de quatre ans et est entouré d'une seulement un ensemble de doubles quotes au lieu de deux! Et certainement votre application HTML peut passer les paramètres déjà divisés à la virgule! – Compo

+0

nombre de paramètres n'est pas le problème ici, dans mon exemple, je l'ai défini comme% 1, car il n'y avait pas d'autre. Mais je vois le problème avec des ensembles de doubles quotes maintenant. –

+0

Eh bien, cela dépend de la façon dont vous définissez "problème" car votre code fonctionne clairement avec le premier argument, "% 1" qui devrait se résoudre en tant que "PARAM". Si votre question n'a pas de sens ou si vous ne l'éditez pas avec soin, elle déroutera les lecteurs et entravera les solutions potentielles. Et pourquoi votre application HTML ne peut-elle pas passer les paramètres déjà séparés à la virgule? – Compo

Répondre

0

La raison de l'échec était le double doublequotes dans le paramètre passé. Après les enlever, les arguments sont traités correctement:

set test=%3 
echo "%test%" rem output: ""ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles"" 

set test=%test:"=% 
echo "%test%" rem output: "ARG=CUSTOM_SOURCE,SOURCE=C:\Folder\OtherFolder\SourceFiles" 

:nextVar 
    for /F "tokens=1* delims=," %%a in ("%test%") do (
     set %%a 
     set test=%%b 
    ) 
if defined test goto nextVar 
echo ARG=%ARG%, SOURCE=%SOURCE% 
rem output: ARG=CUSTOM_SOURCE, SOURCE=C:\Folder\OtherFolder\SourceFiles