2017-07-03 1 views
1

J'utilise batch et WinSCP pour me connecter à un serveur FTP et télécharger automatiquement certains fichiers. Après un changement de mot de passe récent, j'ai rencontré le problème que le mot de passe contient des caractères spéciaux qui ne me permettent pas de me connecter au serveur.Utiliser le traitement par lots pour convertir la chaîne en URL de session WinSCP

Les caractères spéciaux peuvent être trouvés ici: Session URL :: WinSCP

les caractères forebidden La conversion ne doit pas être un problème en théorie. J'ai utilisé le code suivant pour convertir une chaîne avec un caractère %:

setlocal 
SET test="Test % test" 
set test=%test:%=%25% 
echo %test% 

La sortie du script est =5.

Il y a donc un problème avec le %. J'ai essayé d'échapper à la % avec %%. Par conséquent, mon code ressemble à ceci:

setlocal 
set test="Test %% test" 
set test=%test:%%=%%25% 
echo %test% 

La sortie est 5.

Est-il possible de coder une chaîne donnée, pour répondre aux exigences de l'URL de la session avec batch? Comment puis-je encoder la chaîne?

+0

Une partie de votre question est peut-être que la deuxième commande 'set' dans les deux exemples évalue une variable appelée' test: 'que vous n'avez pas défini. il semblerait aussi que vous pourriez avoir une variable '25' définie avec une valeur de' 5' (ce qui est une surprise). Vous pouvez essayer echo '% 25%' et voir si vous obtenez un '5' en retour. (et ensuite 'set 25 =' l'effacera). Voyez si cela aide: https://stackoverflow.com/questions/37333620/special-characters-in-batch-file – GregHNZ

Répondre

1

Echapper à la destination et à l'intérieur du lot sont des choses différentes, pour garder le single % interprété par cmd il doit être doublé.

@Echo off&SetLocal EnableExtensions EnableDelayedExpansion 
set test="Test %% test" 
set test 
set test=!test:%%=%%25! 
set test 

Exemple de sortie:

test="Test % test" 
test="Test %25 test"