PowerShell v1 Move-Item 不移动项目

PowerShell v1 Move-Item 不移动项目

我有一个脚本(粘贴在下面),它应该执行以下操作:

  1. 循环并抓取与定义模式匹配的所有文件
  2. 将这些文件复制到另一个位置
  3. 将原始源文件移动到另一个位置(如果复制成功)

它正在执行步骤 #1 和 #2,但步骤 #3,Move-Item 没有移动任何文件,我不知道为什么,也没有收到任何错误提示

有人能帮忙吗?谢谢

$source = "C:\Users\Tom\"
$source_move = "C:\Users\Tom\OldLogBackup1\"
$destination ="C:\Users\Tom\Mirror\"

if(-not(Test-Path $destination)){mkdir $destination | out-null}

#Step 1
ForEach ($sourcefile In $(Get-ChildItem $source | Where-Object { $_.Name -match "Daily_Reviews\[\d\d\d\d-\d\d\d\d\].journal" }))
{
    #escape filename because there are brackets in the name!
$src = [Management.Automation.WildcardPattern]::Escape($sourcefile)

    #Step 2
    Copy-Item  $src $destination

### Check for a successful file copy
if($?)
{


    if(-not(Test-Path $source_move)){
        echo "Path does not exist!"
    } else { 
        echo "Path exists!"

        ### Step 3
                    ### Move original source file someplace else
        Move-Item $source_move$sourcefile $source_move
        if($?)
        {
            echo "Source file successfully moved"

        } else {

            echo "Source file was not successfully moved"

    }
  }
}

答案1

首先,看起来您正在将文件移动到它们开始的同一目录中...从 $source_move 到 $source_move。我认为您希望它看起来像这样:

Move-Item $source + $sourcefile $source_move

另外,尝试在 $source_move 和 $sourcefile 之间放置一个 +。

答案2

这正是你的问题。你不能像那样将变量链接在一起。PoSh 感到困惑。

尝试这个:

PS C:\> $a = "Powershell"
PS C:\> $b = " Rocks!"
PS C:\> $a
Powershell
PS C:\> $b
 Rocks!
PS C:\> $a$b
At line:1 char:3
+ $a$b
+   ~~
Unexpected token '$b' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

PS C:\> $a+$b
Powershell Rocks!
PS C:\> "$a$b"
Powershell Rocks!

您尝试移动到同一文件夹(源 = 目标)。这绝对不行。

相关内容