【问题标题】:FTP files from folders that have international characters/mutations/vowels (ä. ö. ü) with Windows FTP in batch-file来自具有国际字符/突变/元音 (ä. ö. ü) 的文件夹中的 FTP 文件,使用 Windows FTP 在批处理文件中
【发布时间】:2016-01-05 15:12:28
【问题描述】:

我正在尝试创建一个将文件上传到 FTP 服务器的批处理文件。除了一个名称中有突变/元音的特定文件夹(无法更改。也就是文件夹名称里面有一个ö)之外,这一切都很好。

我的问题是:有哪些选择可以实现这一目标?

ftp 批处理文件示例(UTF-8 编码):

cd C:\uplaodfiles\ländle\*
ftp -n -s:C:\test\UploadTest.ftp

加载文件示例:

open meimei
user meiuser meipassword
pasv
bin
cd uploaddir
prompt
mput c:\uploadfiles\ländle\*
close
bye

ftp 尝试将ä 转换为本地驱动器自然找不到的特殊字符之前,这一切都有效。

作为附加说明:我从命令行的c:\test 文件夹开始,因为UploadTest.bat 文件位于那里......即使我使用cd。因此,如果我使用不带参数的mput(或仅给出*),它仍然是c:\test,他会复制它。

编辑:

运行的输出(我删除了不重要的部分.....pasv 顺便说一句失败了。不知道为什么?之前已经展示过,所以我把那部分排除在外)。

ftp> BIN
200 Command okay.
ftp> cd uploaddir
250 CWD command successful.
ftp> prompt
Interaktivmodus AUS .              <-- interactive mode off
ftp> mput C:\L├ñndle\*             <-- should be Ländle
C:\Ländle\*:Datei nicht gefunden  <-- file not found
ftp> close
221 Service closing control connection.
ftp> bye

由于其中有一部分是德语,我已经在必要时使用

进行了翻译

【问题讨论】:

  • 尝试“OPTS UTF8 ON”,以便 ftp 客户端和服务器同意使用 UTF-8 编码名称
  • 这个特定的目标ftp服务器貌似不知道opts命令(刚试了一下,然后看命令列表)
  • tar/zip、ftp 和 untar/unzip 是一种选择,使用 Perl 或 Python ftp 模块是另一种选择
  • 如果我连文件夹都进不去,tar/zip 会带来什么? (因为元音/突变)以及 lc 命令失败。
  • 哦,好的,从那里转到带有突变和 tar/zip 的文件夹的父文件夹也不起作用?

标签: batch-file ftp


【解决方案1】:

只要UploadTest.ftp 是,它就可以工作

  • UTF-8 编码(带或不带 BOM)- 仅适用于 Windows 10(未测试 Windows 8)
  • 采用与 Windows 匹配的 ANSI 编码“非 Unicode 程序的语言”,并且文件名中的字符包含在 ANSI 编码中 - Windows 7 和 10

批处理文件中的 UTF-8 似乎不受支持(在 Windows 7 和 Windows 10 中)。所以你不能在那里使用cd(除非使用默认的旧版 ANSI 编码)。


如果您需要 Windows 7 的 UTF-8 解决方案,您可能必须使用另一个 FTP 客户端。

例如WinSCP scripting:

  • 批处理文件:

    winscp.com /log=UploadTest.log /script=UploadTest.ftp
    
  • 上传带有 BOM 的 UTF-8 编码的脚本 (UploadTest.ftp):

    open ftp://meiuser:meipassword@meimei/
    cd uploaddir
    put c:\uploadfiles\ländle\*
    exit
    

请参阅Converting Windows FTP script to WinSCP script 的指南。

(我是 WinSCP 的作者)

【讨论】:

  • 是的普通 Windows ftp.exe。我正在使用 pasv 命令,正如在一个示例中提到的那样,如果我使用我使用的命令之一(并且连接时“?”显示),我应该这样做。稍后将尝试了解编码。此处为 Windows 7
  • .ftp 文件的编码为 UTF8-无 BOM(根据 notepad++)。 .bat 文件也一样
  • 您的 ftp 服务器是否配置为接受 utf-8 符号? (它的问题不是来自客户端而是服务器端?。作为我连接的外部 ftp 服务器,我无法检查其配置,所以必须在那里询问)
  • 显示ftp.exe 的输出,以便我们判断是本地问题还是远程问题。
  • 还向我们展示了? 的输出。我那里没有pasv
【解决方案2】:

也许微软已经更新了 ftp.exe?但我的经历与@Martin Prikryl 的经历有些不同:

  • Windows 10 (1903):UploadTest.ftp 可以是 UTF-8 编码,有或没有 BOM
  • Windows 7:UploadTest.ftp 可以是 UTF-8 编码,BOM 不能存在
  • Windows XP (!):UploadTest.ftp 可以是 UTF-8 编码,BOM 不能存在

使用字符 ä、ö、ü 和 ᚠ 进行测试。

编辑 1: UTF-8 的替代方案是使用机器的 ANSI 代码页 (ACP) 而不是 OEM 代码页 (OEMCP) 编码的 ASCII 文件。

编辑 2: 如果你想使用 ftp.exe 进程的标准输出,标准输出的编码必须是带有 OEM 代码页的 ASCII(仅在 Windows 10 下测试)!多么典型的 MS 混乱!

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。我的批处理文件由 VBScript 生成,并以 UTF-8 编码。解决方案是将文件转换为 ANSI。您可以尝试转换您的批次和测试。如果可行,可以使用https://www.vbsedit.com/scripts/misc/text/utf8_ansi.asp中的代码

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2015-12-05
    • 2021-06-08
    • 2017-05-31
    相关资源
    最近更新 更多