回声时添加空格

时间:2018-01-24 19:08:23

标签: batch-file

当我想回显一个包含变量的命令时,会在它们之间添加空格并且我的命令不起作用:/

代码:

@echo on
chcp 65001 > nul
if exist Sauvegarde.bat del Sauvegarde.bat
set /p path=Donner le chemin du dossier à sauvegarder (dossier compris):
set /p hote=Donner l'hôte(ou ip) du serveur FTP :
set /p utilisateur=Donner l'utilisateur : 
set /p mdp=Donner le mot de passe : 
echo @echo on > Sauvegarde.bat  
set path=%path% >> Sauvegarde.bat  
set hote=%hote% >> Sauvegarde.bat  
set utilisateur=%utilisateur% >> Sauvegarde.bat  
set mdp=%mdp% >> Sauvegarde.bat  
echo :menu >> Sauvegarde.bat  
echo echo "/------------------------------\" >> Sauvegarde.bat
echo echo "|         1-Sauvegarde         |" >> Sauvegarde.bat
echo echo "|  2-Activer Sauvegarde Auto   |" >> Sauvegarde.bat
echo echo "|   3-Recommencer la config    |" >> Sauvegarde.bat
echo echo "|           4-Fermer           |" >> Sauvegarde.bat
echo echo "\------------------------------/" >> Sauvegarde.bat
echo set /p choix=Entrer un choix :  >> Sauvegarde.bat
echo if %%choix%% == 1 GOTO sauvegarder >> Sauvegarde.bat
echo if %%choix%% == 2 GOTO autosauvegarde >> Sauvegarde.bat
echo if %%choix%% == 3 GOTO recommencer >> Sauvegarde.bat
echo if %%choix%% == 4 GOTO quitter >> Sauvegarde.bat
echo echo Entrer un chiffre entre 1 et 4 !!! >> Sauvegarde.bat
echo goto menu >> Sauvegarde.bat
echo :sauvegarder >> Sauvegarde.bat
echo set filename=Sauvegarde_%%date:~-4,4%%-%%date:~-7,2%%-%%date:~10,2%%.zip >> Sauvegarde.bat
echo .\lib\zip.exe -r -u %%filename%% test >> Sauvegarde.bat
echo .\lib\winscp.com /command "open ftp://%utilisateur%:%mdp%@%hote%" "put %filename%" /log="script.log">> Sauvegarde.bat
pause
start Sauvegarde.bat
pause

这条线是关注的:

echo .\lib\winscp.com /command "open ftp://%utilisateur:%mdp@%hote" "put %filename%" /log="script.log">> Sauvegarde.bat

输出带有以下空格: X是隐藏我的登录信息

.\lib\winscp.com /command "open ftp://XXXXXXXX   :XXXXXXXXX   @XXX.XXX.XXX.XXX   " "put " /log="script.log"

2 个答案:

答案 0 :(得分:2)

filename未设置,可能是

echo set filename=...

应该没有echo和重定向,应该移到echo @echo on > Sauvegarde.bat行之前。

你有很多行,比如

set utilisateur=%utilisateur% >> Sauvegarde.bat  

这样做似乎不合逻辑 - 也许你的意思是ECHO set...此外,你在行的末尾有一些可变数量的空格 - 这可能是累积的杂散空间的来源。您的运行报告似乎是由批次创建的批次创建的。

这也是语法

的原因
set "var=value"
使用了

- 无论行上的空格如何,该值都将分配给var

你知道吗

(
 echo this
 echo that
 echo something else
)>filename

会创建一个新文件filename,其中包含累积的echo es?

答案 1 :(得分:0)

向您展示echo,使用choice并修复其他一些内容的示例:

@Echo Off
Rem ChCp 65001 > Nul
Set /P "pth=Donner le chemin du dossier … sauvegarder (dossier compris): "
Set /P "hote=Donner l'h“te(ou ip) du serveur FTP: "
Set /P "utilisateur=Donner l'utilisateur: "
Set /P "mdp=Donner le mot de passe: "

(   Echo @Echo Off
    Echo :menu
    Echo Echo "/------------------------------\"
    Echo Echo "|         1-Sauvegarde         |"
    Echo Echo "|  2-Activer Sauvegarde Auto   |"
    Echo Echo "|   3-Recommencer la config    |"
    Echo Echo "|           4-Fermer           |"
    Echo Echo "\------------------------------/"
    Echo Choice /C 1234 /M "Entrer un choix"
    Echo If ErrorLevel 4 GoTo quitter
    Echo If ErrorLevel 3 GoTo recommencer
    Echo If ErrorLevel 2 GoTo autosauvegarde
    Echo :sauvegarder
    Echo Set "filename=Sauvegarde_%%date:~-4,4%%-%%date:~-7,2%%-%%date:~-10,2%%.zip"
    Echo .\lib\zip.exe -r -u %%filename%% test
    Echo .\lib\winscp.com /command "open ftp://%%utilisateur%%:%%mdp%%@%%hote%%" "put %%filename%%" /log="script.log"
) > "Sauvegarde.bat"
Pause
Call "Sauvegarde.bat"
Pause

Rem确定了第二行,我认为没有必要,你可以另外决定,并删除那些不再需要的行。

请记住,您需要完成菜单项的其他标签

注意

3行和4行,您会发现有些字符与问题脚本中的字符不同。它们是直接从我的cmd.exe输出粘贴字符的结果。如果这些字符在您的测试中无法正常呈现,请随时根据需要将替换为à,将替换为ô