如何使用变量将文件移动到另一个文件夹...转义字符串

How to move files to another folder using variables...escape strings

我正在尝试将文件从一个文件夹移动到新创建的文件夹。当我写入主机时,文件和文件夹名称是正确的,但文件没有移动。这是我遇到问题的代码部分。显然这不会移动文件,但我已经尝试了几乎所有试图转义字符串的变体。

$fileToMove= "$($path)$($Event.SourceEventArgs.Name)"
Write-Host "File to move: $($fileToMove)"
$folder = New-Item -ItemType Directory -Path "$(split-path $Event.SourceEventArgs.FullPath)$((Get-Date).ToString('yyyy'))$((Get-Date).ToString('MMM yyyy'))$((Get-Date).ToString('MMM d yyyy'))"
Write-Host "Folder name:$($folder)"
Move-Item '$($path)' '$($folder)'

好的 - 有几处错误:

1 - 您在 'move-item' 行中使用了单引号以防止变量扩展。

2 - 您在 'move-item' 命令中引用了“$path”而不是“$filetomove”。

3 - 您在 'move-item' 行中引用了“$folder”。 '$folder' 指的是对象而不是路径。 PowerShell 可能会在幕后很好地处理这个问题,但值得注意。我修改了该行以传递文件夹的全名。

我还删除了一些不需要的 $()。

$fileToMove= "$path$($Event.SourceEventArgs.Name)"
Write-Host "File to move: $fileToMove"
$folder = New-Item -ItemType Directory -Path "$(split-path $Event.SourceEventArgs.FullPath)$((Get-Date).ToString('yyyy'))$((Get-Date).ToString('MMM yyyy'))$((Get-Date).ToString('MMM d yyyy'))"
Write-Host "Folder name: $folder"
Move-Item "$fileToMove" "$($folder.FullName)"

事实上,您根本不需要使用引号。 Move-Item 是一个内部命令,PowerShell 将发送它在参数中找到的任何值,包括任何空格,因此以下内容也应该有效。

move-item $fileToMove $folder

我能够使用下面的代码让它工作:

$folder = New-Item -ItemType Directory -Path "$($dPath)$((Get-Date).ToString('yyyy'))$((Get-Date).ToString('MMM yyyy'))$((Get-Date).ToString('MMM d yyyy'))"
Write-Host "$dpath$((Get-Date).ToString('yyyy'))$((Get-Date).ToString('MMM yyyy'))$((Get-Date).ToString('MMM d yyyy'))"

Move-Item "$($Event.SourceEventArgs.FullPath)" "$($dPath)$((Get-Date).ToString('yyyy'))$((Get-Date).ToString('MMM yyyy'))$((Get-Date).ToString('MMM d yyyy'))"