【问题标题】:username with | pipe failing in windows FTP command line batch用户名 | Windows FTP命令行批处理中的管道失败
【发布时间】:2013-07-10 15:30:41
【问题描述】:

在创建批处理文件来处理 FTP 命令时,当 ftp/batch 出现管道问题时,如何输入用户名。

注意:主机和用户名中的点/句点是有意的。

示例

REM Connection information:
SET Server=my.server.com
SET UserName=my.server.com|my.username
SET Password=password


IF NOT EXIST "%TEMP%\FTPCommands" MD "%TEMP%\FTPCommands"
SET Commands="%TEMP%\FTPCommands\SendToFTP_commands.txt"


rem -- add username and password to commands file
ECHO %UserName%> %Commands%
ECHO %Password%>> %Commands%

FTP -d -i -s:%Commands% %Server%

错误

“'my.username' 不是内部或外部命令、可运行程序或批处理文件。”

【问题讨论】:

  • 试着把它放在某种形式的引号中。这通常可以解决我的大部分问题。

标签: windows batch-file


【解决方案1】:

试试这个:

@echo off &setlocal
SET "UserName=my.server.com|my.username"
SETLOCAL ENABLEDELAYEDEXPANSION
> "%Commands%" ECHO(!UserName! 
endlocal

【讨论】:

    【解决方案2】:

    将变量定义放在双引号之间并用^转义管道:

    set "UserName=my.server.com^|my.username"
    

    如果没有双引号,您需要两次转义管道:一次是在定义时,一次是在回显变量时:

    set UserName=my.server.com^^^|my.username"
    

    ^^ 是转义的^^| 是转义的|,因此在回显变量时仍然有转义管道。

    【讨论】:

    • 感谢 Ansgar,变量定义周围的双引号效果很好!
    【解决方案3】:

    你可以使用 ^|逃离|符号。

    更新以纠正 ansgar 指出的转义字符 多斯对待|作为管道符号,并尝试将一个命令的输出作为另一个命令的输入。因此你的错误。因为管道符号在那里,所以批处理文件解释器希望 my.server.com 是一个程序,因此您正试图将其输出通过管道传输到 my.username。

    【讨论】:

    • 反斜杠不是批量转义字符。这不是 bash。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2013-01-08
    • 2011-11-12
    • 2014-09-27
    相关资源
    最近更新 更多