Supprimer le premier et le dernier caractère d’une chaîne dans un fichier batch Windows

J’ai la chaîne suivante dans mon fichier de commandes Windows:

"-Ssortingng" 

La chaîne contient également les deux guillemets au début et à la fin de la chaîne, comme il est écrit ci-dessus.

Je veux dépouiller les premiers et derniers caractères pour obtenir la chaîne suivante:

 -Ssortingng 

J’ai essayé ceci:

 set currentParameter="-Ssortingng" echo %currentParameter:~1,-1% 

Cela imprime la chaîne comme il se doit:

 -Ssortingng 

Mais quand j’essaie de stocker la chaîne modifiée comme ceci, elle échoue:

 set currentParameter="-Ssortingng" set currentParameter=%currentParameter:~1,-1% echo %currentParameter% 

Rien ne s’imprime. Qu’est-ce que je fais mal?


C’est vraiment étrange. Quand je supprime les caractères comme ça, ça marche:

 set currentParameter="-Ssortingng" set currentParameter=%currentParameter:~1,-1% echo %currentParameter% 

il imprime:

 -Ssortingng 

Mais en réalité mon lot est un peu plus compliqué et là ça ne marche pas. Je vais montrer ce que j’ai programmé:

 @echo off set ssortingng="-Ssortingng","-Ssortingng2" Set count=0 For %%j in (%ssortingng%) 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 ("%ssortingng%") Do ( echo Ssortingng WITHOUT ssortingpping characters: %%I set currentParameter=%%I set currentParameter=%currentParameter:~1,-1% echo Ssortingng WITH ssortingpping characters: %currentParameter% echo . ) exit /b :end 

Et la sortie est la suivante:

 . Ssortingng WITHOUT ssortingpping characters: "-Ssortingng" Ssortingng WITH ssortingpping characters: . . Ssortingng WITHOUT ssortingpping characters: "-Ssortingng2" Ssortingng WITH ssortingpping characters: ~1,-1 . 

Mais ce que je veux c’est:

 . Ssortingng WITHOUT ssortingpping characters: "-Ssortingng" Ssortingng WITH ssortingpping characters: -Ssortingng . . Ssortingng WITHOUT ssortingpping characters: "-Ssortingng2" Ssortingng WITH ssortingpping characters: -Ssortingng2 . 

Vous modifiez une variable à l’intérieur d’un bloc entre parenthèses. Méfiez-vous – la nouvelle valeur ne sera pas utilisée dans le même bloc (à moins que vous ne délimitez la variable avec! Au lieu de% – et que vous l’utilisiez en mode extension activée). Ou simplement extraire le couple de lignes dans une autre sous-fonction, en utilisant une séquence simple de lignes insted de ()

salue, Stach

J’espère que cela vous aidera. echo Ssortingng SANS supprimer les caractères: %% I

 set currentParameter=%%I set currentParameter=!currentParameter:~1,-1! echo Ssortingng WITH ssortingpping characters: !currentParameter! echo . 

Cela peut fonctionner. Essayez ceci une fois.

Ce script tire parti de ENABLEDELAYEDEXPANSION. Si vous ne le savez pas, les scripts par lots s’exécutent pour et si les commandes sont toutes combinées; donc si vous faites:

 if true==true ( @echo off set testvalue=123 echo %testvalue% pause >NUL ) 

Vous ne générerez rien, car lorsque echo% testvalue% est exécuté, il n’a pas reconnu que la valeur de test a été modifiée. L’utilisation de delayexapnsion permet au script de lire cette valeur telle qu’elle est maintenant et d’oublier le problème que j’ai déclaré précédemment. Vous l’utilisez comme% testvalue%, mais vous pouvez le faire! pour corriger cela:

 if true==true ( @echo off set testvalue=123 echo !testvalue! pause >NUL ) 
  • Serait l’écho 123.

 @echo off SETLOCAL ENABLEDELAYEDEXPANSION set ssortingng="-Ssortingng","-Ssortingng2" Set count=0 For %%j in (%ssortingng%) 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 ("%ssortingng%") Do ( echo Ssortingng WITHOUT ssortingpping characters: %%I set currentParameter=%%I set currentParameter=!currentParameter:~1,-1! echo Ssortingng WITH ssortingpping characters: !currentParameter! echo . ) exit /b :end 

~ Alex