我需要帮助结束与同事的辩论。我有以下脚本:
$source = '\\serverA\folder'
$destination = '\\serverB\folder'
Copy-Item -Path "$source\myFile.txt" -Destination $destination
我的同事声称我需要在目标参数的末尾添加一个反斜杠,以便它显示为$destination = '\\serverB\folder\'
,否则我可能会出现无法预料的并发症。
那么,反斜杠是否在我上面的精确语法中提供了至关重要的?从我在网上看到的情况看,它似乎是随意的,取决于编码员。
答案 0 :(得分:1)
我在powershell中做了很多文件处理,而且我总是忽略了我的路径中的最后一个文件,但是我不确定它是否真的有所作为。你的同事准确推理是什么?
您还可以认为以斜杠结尾的路径是目录,而不是以一个结尾的路径是文件。我很确定这是一个意见问题。
编辑,似乎之前已经讨论过了。 Should a directory path variable end with a trailing slash?
答案 1 :(得分:0)
您的同事可能会将PowerShell与VBScript混淆。如果目标是文件夹,则VBScript的CopyFile
和CopyFolder
方法需要尾随反斜杠。只要文件夹存在,PowerShell的Copy-Item
cmdlet就不关心目标是否有反斜杠。
PS C:\Temp> ls -r | select Mode, FullName | ft -AutoSize Mode FullName ---- -------- d---- C:\Temp\a -a--- C:\Temp\a\foo.txt PS C:\Temp> Copy-Item 'C:\Temp\a\foo.txt' 'C:\temp\b' PS C:\Temp> ls -r | select Mode, FullName | ft -AutoSize Mode FullName ---- -------- d---- C:\Temp\a -a--- C:\Temp\b -a--- C:\Temp\a\foo.txt PS C:\Temp> Remove-Item 'C:\temp\b' PS C:\Temp> Copy-Item 'C:\Temp\a\foo.txt' 'C:\temp\b\' Copy-Item : The filename, directory name, or volume label syntax is incorrect. ...
一个不存在的目标路径带有一个尾部反斜杠会引发错误,而没有一个尾部反斜杠,目标就会被创建为一个文件。
然而,IMO处理丢失的目标文件夹的更好方法是实际检查它们的存在并在它们不存在时创建它们:
if (-not (Test-Path -LiteralPath $destination -Type Container)) {
New-Item -Type Directory -Path $destination | Out-Null
}