Batch file 上载带有UTF-8文件名问题的文件

Batch file 上载带有UTF-8文件名问题的文件,batch-file,utf-8,cmd,Batch File,Utf 8,Cmd,我想上传我的文件到FTP服务器使用与Windows conmand提示。如果文件名不包含UTF-8字符,则工作正常。但如果它包含UTF-8字符,则不会上载到FTP服务。 我的test.bat: @echo off chcp 65001 echo >> %TMP%\ab.dat echo user b12_17312633> %TMP%\ab.dat echo 123456ab>> %TMP%\ab.dat echo bin>> %TMP%\ab.dat

我想上传我的文件到FTP服务器使用与Windows conmand提示。如果文件名不包含UTF-8字符,则工作正常。但如果它包含UTF-8字符,则不会上载到FTP服务。 我的test.bat:

@echo off

chcp 65001
echo >> %TMP%\ab.dat
echo user b12_17312633> %TMP%\ab.dat
echo 123456ab>> %TMP%\ab.dat
echo bin>> %TMP%\ab.dat
echo cd htdocs>> %TMP%\ab.dat

for /R %1 %%f in (*.txt) do (
    echo put "%%f">> %TMP%\ab.dat
    )

echo bye>> %TMP%\ab.dat
echo quit>> %TMP%\ab.dat
ftp -n -s:%TMP%\ab.dat ftp.byethost12.com
pause
输出:

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 456 of 1900 allowed.
220-Local time is now 20:57. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 60 seconds of inactivity.
ftp> user b12_17312633
331 User b12_17312633 OK. Password required

230 OK. Current restricted directory is /
ftp> bin
200 TYPE is now 8-bit binary
ftp> cd htdocs
250 OK. Current directory is /htdocs
ftp> put "C:\Users\user\Desktop\FTP\çtü.txt"
C:\Users\user\Desktop\FTP\çtü.txt: File not foundftp> bye
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.
我在“çtü.txt”上试用了一下。 注意:我是在Windows命令提示符下完成的

  • -s:
    指定包含
    ftp
    命令的文本文件。这些命令在ftp启动后自动运行。此参数
    不允许有空格。使用此参数而不是重定向(您使用的是哪个FTP客户端?抱歉,我是初学者。我不太了解您。我的FTP服务器纯FTPd。我使用CMD连接FTP服务器。没关系。非ASCII文件名要求服务器和客户端支持UTF-8文件名模式(RFC 264)。纯FTP服务器提供,但由于Windows多年来没有提供命令行FTP客户端,我怀疑您的客户端是否提供。您可能有幸使用ncftp、Cygwin的FTP客户端,或者可能使用完全不同的协议,如SFTP。嗯,那么我将使用另一个FTP客户端。感谢提供的信息:)请查看我的更新答案。现在应该可以了。问题不在于文件内容。它位于文件名处。另外,我的文件已经使用UTF-8,没有BOM。@RecepSelimAğ305; rman您尝试过我的解决方案吗,您应该会看到一个文件
    tçtü.txt
    上传,您的脚本按照我的建议进行了改进……是的,我现在尝试了。你说得对。我看到了tçtü.txt。那么,现在我如何得到我想要的结果呢?我的意思是,它在我的计算机上不工作。请仔细检查
    utf8bom.txt
    文件,并使用十六进制查看器/编辑器检查
    %TMP%\ab.dat
    是否包含UTF-8 BOM。注意
    >
    回送用户b12\U 17312633>>%TMP%\ab.dat中的重定向器。或者尝试命令行
    chcp 437
    ,然后
    type%TMP%\ab.dat
    它应该返回
    ∩╗┐用户b12\U 17312633在第一行显示:
    C:\Users\user>chcp 437 Etkin kod sayfasi:437 C:\Users\user>type%TMP%\ab.dat用户b12\U 17312633 123456ab二进制cd htdocs put“C:\Users\user\Desktop\Recep Selim\FTP\testttt.txt”put“C:\Users\user\Desktop\Recep Selim\FTP\utf8.txt”put“C:\Users\user\Desktop\Recep Selim\FTP”\├ºt├╝.txt“再见退出C:\Users\user>
    @echo off
    chcp 65001
    powershell -command [System.IO.File]::WriteAllBytes("'%TMP%\ab.dat'", (0xEF,0xBB,0xBF))
    echo user b12_17312633>> %TMP%\ab.dat
    rem … the script continues here