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

时间:2016-05-20 01:43:46

标签: powershell powershell-v2.0

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

$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)'

2 个答案:

答案 0 :(得分:0)

好的 - 有一些问题:

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

答案 1 :(得分:0)

我能够使用以下代码:

$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'))"