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




