You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

PowerShell FTP下载文件后记事本格式异常问题求助

搞定PowerShell FTP下载的文本排版问题

嘿,这个问题我太熟了!核心原因就是你脚本里的FTP传输模式选错了——你开了二进制模式,但文本文件得用ASCII模式才行。

直接上修改好的脚本

$File = "D:\copiedfile.txt" 
$ftp = "ftp://remote_machine_name//tmp/text.txt" 
$ftprequest = [System.Net.FtpWebRequest]::Create($ftp) 
# 关键改动:把二进制模式改成ASCII模式
$ftprequest.UseBinary = $false
$ftprequest.UsePassive = $true # 加个被动模式,避免防火墙卡连接
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::DownloadFile

# 执行下载流程
$ftpresponse = $ftprequest.GetResponse()
$responsestream = $ftpresponse.GetResponseStream()
$filestream = New-Object IO.FileStream($File, [IO.FileMode]::Create)
$responsestream.CopyTo($filestream)

# 别忘了关流和响应,避免资源泄漏
$filestream.Close()
$responsestream.Close()
$ftpresponse.Close()

为啥手动FTP就没问题?

普通的手动FTP工具(包括命令行FTP)默认会自动识别文本文件,自动切换到ASCII模式传输。这种模式下,FTP会把远程Unix系统里的LF换行符转换成Windows系统的CRLF,而记事本只认CRLF当换行,所以手动传的文件排版正常。但你脚本里强制用二进制模式,直接原封不动传字节,LF到了Windows上就不被记事本识别,自然排版乱了。

小提示

  • 如果要处理多种文件类型,可以加个判断:比如.txt.log这类文本后缀用UseBinary = $false.zip.exe这类二进制文件用$true
  • 被动模式UsePassive = $true建议加上,不然很多公司防火墙会拦FTP连接。

内容的提问来源于stack exchange,提问作者Karthikeyan

火山引擎 最新活动