Supprimer en premier et dernier caractère d'une Chaîne de caractères dans un fichier de commandes Windows
J'ai la chaîne suivante à l'intérieur de mon fichier de commandes Windows:
"-String"
La chaîne contient également de la twoe des guillemets au début et à la fin de la chaîne, afin, comme il est écrit ci-dessus.
Je tiens à dépouiller les premiers et derniers caractères de sorte que je reçois la chaîne suivante:
-String
J'ai essayé ceci:
set currentParameter="-String"
echo %currentParameter:~1,-1%
Ceci affiche la chaîne qu'elle devrait l'être:
-String
Mais quand j'essaie de stocker les édité chaîne comme celle-ci, il échoue:
set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%
Rien n'est imprimé. Que dois-je faire de mal?
C'est vraiment étrange. Lorsque je supprime les caractères comme ceci cela fonctionne:
set currentParameter="-String"
set currentParameter=%currentParameter:~1,-1%
echo %currentParameter%
il imprime:
-String
Mais en réalité, mon lot est un peu plus compliqué et il il ne fonctionne pas. Je vais vous montrer ce que j'ai programmé:
@echo off
set string="-String","-String2"
Set count=0
For %%j in (%string%) Do Set /A count+=1
FOR /L %%H IN (1,1,%COUNT%) DO (
echo .
call :myFunc %%H
)
exit /b
:myFunc
FOR /F "tokens=%1 delims=," %%I IN ("%string%") Do (
echo String WITHOUT stripping characters: %%I
set currentParameter=%%I
set currentParameter=%currentParameter:~1,-1%
echo String WITH stripping characters: %currentParameter%
echo .
)
exit /b
:end
Et la sortie est:
.
String WITHOUT stripping characters: "-String"
String WITH stripping characters:
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: ~1,-1
.
Mais ce que je veux est:
.
String WITHOUT stripping characters: "-String"
String WITH stripping characters: -String
.
.
String WITHOUT stripping characters: "-String2"
String WITH stripping characters: -String2
.
Je reçois le message suivant:
ECHO ist ausgeschaltet (OFF). ~1,-1
Peut-être que c'est parce que ses dans une fonction?
:myFunc FOR /F "tokens=%1 delims=," %%I IN ("%processChain1%") Do ( set currentParameter=%%I set currentParameter=%currentParameter:~1,-1% echo %currentParameter% rem java -jar app.jar %%I ) exit /b
La cause est que pour cent de l'expansion est au moment de l'analyse d'un bloc pas au moment de l'exécution. Mais dans votre cas, il peut être résolu avec l' %%~I, ...dynamique nombre de tokens
Juste ce petit
~
a fait le travail...génial. Merci beaucoupOriginalL'auteur Metalhead89 | 2012-08-22
Vous devez vous connecter pour publier un commentaire.
Vous sont portées d'une variable à l'intérieur d'une parenthèse bloc. Attention, la nouvelle valeur ne sera pas utilisé dans le même bloc (sauf si vous délimiter la variable avec ! au lieu de % - et en cours d'exécution dans le enabledelayedexpansion mode).
Ou il suffit d'extraire le couple de lignes dans un autre sous-fonction, en utilisant un simple suite de lignes insted d' ( )
accueille, Stach
OriginalL'auteur Stach
l'espérons, vous aideront. echo Chaîne SANS décapage de caractères:
%%I
Cela pourrait fonctionner. Essayez cette fois.
OriginalL'auteur phani
Ce script prend avantage de ENABLEDELAYEDEXPANSION.
Si vous ne savez pas, lot exécution des scripts et des commandes tout en un; par conséquent, si vous n':
De ne pas afficher quoi que ce soit, parce que quand echo %testvalue% est exécuté, il n'a pas reconnu la testvalue a été changé.
À l'aide de delayedexapnsion permet au script de lire cette valeur comme il est maintenant, et d'oublier le problème je l'ai dit avant. Vous l'utilisez comme %testvalue%, mais vous pouvez le faire !testvalue! pour résoudre ce problème:
~ Alex
OriginalL'auteur Alex Lindstrom