【问题标题】:powershell webclient uploadfile # in filenamepowershell webclient uploadfile # in filename
【发布时间】:2017-07-20 05:56:52
【问题描述】:

您好,我刚刚使用 powershell Webclient 进行了测试。 一切似乎都很好,但后来我不得不上传一个名称中带有 # 的文件(test.#00)。 服务器上的文件只是去掉 .#00。服务器上的文件名为 "test" 而不是 "test.#00"。 test.zip 没有任何问题。

这是我在 Powershell Windows 10 上使用的脚本:

$webclient = New-Object System.Net.WebClient 
$localPath = "c:\temp\";
$ftp = "ftp://192.168.0.202/"

$webclient.Credentials = New-Object System.Net.NetworkCredential("admin","admin")  
$webclient.UploadFile($ftp + "test.zip",$localPath +  "test.zip") 
$webclient.UploadFile($ftp + "test.#00",$localPath +  "test.#00") 

【问题讨论】:

  • 试图逃避 #? `#
  • 是的,我试过这个,虽然我对 Powershell 真的很陌生,只将它用于这个简单的脚本,我不知道我是否正确地转义了它。 `# 不起作用!

标签: powershell webclient filenames


【解决方案1】:

URL 中的 #,@,: 等特殊字符必须进行十六进制编码。

其中 23 是 '#' 的十六进制值 (0x23)

Character    Hex Conversion
#            %23
space        %20
@            %40

【讨论】:

  • 感谢您的建议,我想这就是问题所在!
【解决方案2】:

正如@kirill 提到的,您必须对文件名进行十六进制编码。您也可以使用[uri]::EscapeDataString("test.#00") 以编程方式完成此操作

C:\> get-item .\test.#00

    Directory: C:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        7/20/2017   7:23 AM              0 test.#00

C:\> $file = get-item .\test.#00
C:\> $encFileName = [uri]::EscapeDataString($file.Name)
C:\> $encFileName
test.%2300
C:\>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 2011-02-26
    • 2020-08-16
    相关资源
    最近更新 更多