如何在 PowerShell 附加中删除空格

如何在 PowerShell 附加中删除空格

你好,我正在尝试将文件上传到 FTP 帐户,但遇到一个问题,我想将所有文件路径附加到上传文件这是我的ftpupload.txt内容:

ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O : \ p i c s 
 
 O : \ 1 5 1 1 0 4 0 5 1 5 3 3 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 1 2 2 9 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 5 4 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 2 0 1 5 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 5 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 3 4 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 6 1 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 4 9 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 6 4 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 9 2 4 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 6 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 4 1 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 7 1 2 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 5 6 . j p g 
 
 O : \ 1 5 1 1 0 4 0 5 1 7 2 1 I M G _ 2 0 1 5 1 1 0 3 _ 1.jpg

附加文本后的截图

电源外壳命令列出路径:

gci o: -r | % {$_.FullName} >>C:\Users\vb3\desktop\ftp\ftpupload.txt

我想要像这样的文本文件输出我该如何解决这个问题,我是 powershell 新手,所以告诉我解决这个问题的简单方法

ftpusername
ftpPassword
cd htdocs
quote pasv
binary
send O:\151104051533IMG_20151103_111229.jpg
send O:\151104051548IMG_20151103_112015.jpg
send O:\151104051558IMG_20151103_123234.jpg
send O:\151104051610IMG_20151103_123249.jpg

答案1

这通常是一个编码问题。

因此,请注意,在 PowerShellv7 中,所有 cmdlet 以及重定向运算符都使用 UTF8 文本。

但是,Windows PowerShell 中并非所有东西都可以,但有 -Encoding。您可以通过输入以下内容将 UTF8(或其他编码)设置为默认值:

$PSDefaultParameterValues.Add('*:Encoding', 'UTF8')

...在您的用户配置文件和所有分布式/生产脚本中。

您也可以直接删除空格。逐步操作以获得最终解决方案。

# Use your output directly or assign it to a variable use the below
(@'
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O : \ p i c s 

    O : \ 1 5 1 1 0 4 0 5 1 5 3 3 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 1 2 2 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 4 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 2 0 1 5 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 3 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 1 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 4 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 4 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 9 2 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 4 1 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 1 2 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 5 6 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 2 1 I M G _ 2 0 1 5 1 1 0 3 _ 1.jpg
'@).Split("`r`n",[System.StringSplitOptions]::RemoveEmptyEntries) -replace '\s{2}' | 
ForEach {
    If ($PSItem -match 'O :')
    {$PSItem -replace '\s+'} 
    Else {$PSItem}
}
# Results
<#
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O:\pics
O:\151104051533IMG_20151103_111229.jpg
O:\151104051548IMG_20151103_112015.jpg
O:\151104051558IMG_20151103_123234.jpg
O:\151104051610IMG_20151103_123249.jpg
O:\151104051640IMG_20151103_123924.jpg
O:\151104051658IMG_20151103_130741.jpg
O:\151104051712IMG_20151103_130756.jpg
O:\151104051721IMG_20151103_1.jpg
#>


# Pseudo file create... and modify
@'
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O : \ p i c s 

    O : \ 1 5 1 1 0 4 0 5 1 5 3 3 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 1 2 2 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 4 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 2 0 1 5 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 3 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 1 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 4 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 4 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 9 2 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 4 1 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 1 2 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 5 6 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 2 1 I M G _ 2 0 1 5 1 1 0 3 _ 1.jpg
'@ | 
Out-File -LiteralPath 'D:\Temp\ftpUpload.txt'

Get-Content -Path 'D:\Temp\ftpUpload.txt'
# Results
<#
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O : \ p i c s 

    O : \ 1 5 1 1 0 4 0 5 1 5 3 3 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 1 2 2 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 4 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 1 2 0 1 5 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 5 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 3 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 1 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 2 4 9 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 4 0 I M G _ 2 0 1 5 1 1 0 3 _ 1 2 3 9 2 4 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 6 5 8 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 4 1 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 1 2 I M G _ 2 0 1 5 1 1 0 3 _ 1 3 0 7 5 6 . j p g 

    O : \ 1 5 1 1 0 4 0 5 1 7 2 1 I M G _ 2 0 1 5 1 1 0 3 _ 1.jpg
#>

# Read the file back
ForEach ($Line in (
                (Get-Content -Path 'D:\Temp\ftpUpload.txt').Split("`r`n",
                [System.StringSplitOptions]::RemoveEmptyEntries) -replace '\s{2}')
            )
{If ($LIne -match 'O :')
{$Line -replace '\s+'} 
Else {$Line}}
# Results
<#
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O:\pics
O:\151104051533IMG_20151103_111229.jpg
O:\151104051548IMG_20151103_112015.jpg
O:\151104051558IMG_20151103_123234.jpg
O:\151104051610IMG_20151103_123249.jpg
O:\151104051640IMG_20151103_123924.jpg
O:\151104051658IMG_20151103_130741.jpg
O:\151104051712IMG_20151103_130756.jpg
O:\151104051721IMG_20151103_1.jpg
#>

# Modify the raw file
$CleanedContent = ForEach (
                            $Line in (
                                (Get-Content -Path 'D:\Temp\ftpUpload.txt').Split(
                                    "`r`n",[System.StringSplitOptions]::
                                    RemoveEmptyEntries
                                ) -replace '\s{2}'
                            )
                           )
                    {
                        If ($LIne -match 'O :')
                        {$Line -replace '\s+'} 
                        Else {$Line}
                    }
Set-Content -Path 'D:\Temp\ftpUpload.txt' -Value $CleanedContent

# Read the file back
Get-Content -Path 'D:\Temp\ftpUpload.txt'
# Results
<#
ftpusername
ftpPassword
cd htdocs
quote pasv
binary
O:\pics
O:\151104051533IMG_20151103_111229.jpg
O:\151104051548IMG_20151103_112015.jpg
O:\151104051558IMG_20151103_123234.jpg
O:\151104051610IMG_20151103_123249.jpg
O:\151104051640IMG_20151103_123924.jpg
O:\151104051658IMG_20151103_130741.jpg
O:\151104051712IMG_20151103_130756.jpg
O:\151104051721IMG_20151103_1.jpg
#>

相关内容