2010-04-05 10 views
1

Voici un exemple très basique de ce que j'essaie d'implémenter dans un fichier batch plus complexe. Je voudrais extraire une sous-chaîne d'un paramètre d'entrée (%1) et la branche basée sur si la sous-chaîne a été trouvée ou non.Fichier batch: Extraction de la sous-chaîne du paramètre d'entrée à utiliser dans l'instruction IF

@echo off 
SETLOCAL enableextensions enabledelayedexpansion 

SET _testvariable=%1 
SET _testvariable=%_testvariable:~4,3% 

ECHO %_testvariable% 

IF %_testvariable%=act CALL :SOME 
IF NOT %_testvariable%=act CALL :ACTION 

:SOME 
ECHO Substring found 
GOTO :END 

:ACTION 
ECHO Substring not found 
GOTO :END 
ENDLOCAL 

:END 

C'est ce que ma sortie ressemble:

C:\>test someaction 

act 

=act was unexpected at this time. 

Si possible, je voudrais mettre cela dans une instruction IF/ELSE et évaluer directement à partir %1. Cependant, je n'ai pas eu de succès avec l'un ou l'autre.

Répondre

1

Dans vos instructions IF, remplacez = par ==. Je souhaite que vous souhaitiez également remplacer vos instructions CALL par GOTO.

Voici votre code, mais en utilisant IF/ELSE au lieu de deux instructions IF.

@echo off 
SETLOCAL enableextensions enabledelayedexpansion 

SET _testvariable=%1 
SET _testvariable=%_testvariable:~4,3% 

ECHO %_testvariable% 

IF %_testvariable%==act (
    GOTO :SOME 
) ELSE (
    GOTO :ACTION 
) 

:SOME 
ECHO Substring found 
GOTO :END 

:ACTION 
ECHO Substring not found 
GOTO :END 

:END 

ENDLOCAL 
+0

C'était le == qui semblait l'avoir corrigé. Mon fichier batch original où j'avais des problèmes était ~ 300 + lignes et j'ai négligé les détails mineurs. Merci d'avoir été mes yeux supplémentaires. – Neomoon

+0

De rien. Les fichiers batch peuvent être difficiles à déboguer parfois. – aphoria