Powershell 用于重命名和移动文件的Windows脚本

Powershell 用于重命名和移动文件的Windows脚本,powershell,scripting,Powershell,Scripting,我的任务是使用Windows批处理或PowerShell脚本创建存档进程。我在StackExchange上看到了一些例子,但没有什么能完全满足我的需要,我遇到了一些问题 背景如下: 我有3个文件夹 传入 档案馆 外向的 我们的主系统将xml文件放入传入目录,我必须创建一个脚本,每5分钟运行一次,并执行以下操作 遍历传入文件夹中的所有xml文件 将它们重命名为OriginalFilename.ready\u to\u存档 将所有就绪\u到\u存档\u文件复制到存档目录中 进入归档目录后,将其重

我的任务是使用Windows批处理或PowerShell脚本创建存档进程。我在StackExchange上看到了一些例子,但没有什么能完全满足我的需要,我遇到了一些问题

背景如下: 我有3个文件夹

  • 传入
  • 档案馆
  • 外向的
我们的主系统将xml文件放入传入目录,我必须创建一个脚本,每5分钟运行一次,并执行以下操作

  • 遍历传入文件夹中的所有xml文件
  • 将它们重命名为OriginalFilename.ready\u to\u存档
  • 将所有就绪\u到\u存档\u文件复制到存档目录中
  • 进入归档目录后,将其重命名回OriginalFilename.xml
  • 将所有就绪\u到\u存档\u文件复制到传出目录中
  • 进入传出目录后,将其重命名回OriginalFilename.xml
  • 从传入目录中删除所有就绪\u到\u存档\u文件
  • 当然,如果任何阶段失败,则不应转到下一阶段,因为我们不希望删除未正确归档的文件

    我已经看过文件夹迭代和移动项目等,但我遇到了这么多的问题。这真的不是我的主要工作领域,所以任何帮助都将不胜感激

    谢谢

    --编辑--

    以下是我创建的PowerShell脚本:

    $SCRIPT_DIRECTORY = "d:\Temp\archive\"
    $IPS_OUTPUT_DIRECTORY = "d:\Temp\archive\one\"
    $ARCHIVE_DIRECTORY = "d:\Temp\archive\two\"
    $BIZTALK_INCOMING_DIRECTORY = "d:\Temp\archive\three\"
    $ORIGINAL_EXTENSION = ".xml"
    $PREP_EXTENSION = ".ready_for_archive"
    $ARCHIVE_EXTENSION = ".archive"
    
    #STEP 1
    Try
    {
    "Attempting to rename file from .xml to .archive"       
    Set-Location -Path $IPS_OUTPUT_DIRECTORY
    Get-ChildItem *.xml | Rename-Item -NewName { $_.Name -replace $ORIGINAL_EXTENSION,$PREP_EXTENSION   
     }
    }
    Catch [system.exception]
    {
    
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $_.Exception.ItemName
    "Error in Step 1: $FailedItem : $ErrorMessage"
    Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop #Stop here and return to the script's
    base directory - DO NOT CONTINUE!!!!!
    Break
    }
    Finally
    {
    "end of step 1"
    
    #STEP 2
    Try
    {
    "Attempting to copy ready_to_archive file from One to Two"
    Get-ChildItem -path $IPS_OUTPUT_DIRECTORY -recurse -include *.$PREP_EXTENSION |
    Foreach-Object { Copy-Item -path $_ -destination { $_.FullName -replace
    $IPS_OUTPUT_DIRECTORY,$ARCHIVE_DIRECTORY}}
     }
    Catch [system.exception]
     {
      "caught an error in step 2"
        $ErrorMessage = $_.Exception.Message
        $FailedItem = $_.Exception.ItemName
        "Error in Step 2: $FailedItem : $ErrorMessage"
        Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop  #Stop here and return to the script's base directory - DO NOT CONTINUE!!!!!
        Break
     }
    Finally
     {
      "end of step 2"
    
        #STEP 3
    
        Try
         {
            "Attempting to rename files from .ready_to_archive to .archive"     
            Set-Location -Path $ARCHIVE_DIRECTORY
            Get-ChildItem *.xml | Rename-Item -NewName { $_.Name -replace $PREP_EXTENSION,$ARCHIVE_EXTENSION }
         }
        Catch [system.exception]
         {
    
            $ErrorMessage = $_.Exception.Message
            $FailedItem = $_.Exception.ItemName
            "Error in Step 3: $FailedItem : $ErrorMessage"
            Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop #Stop here and return to the script's base directory - DO NOT CONTINUE!!!!!
            Break
    
         }
        Finally
         {
            "end of step 3"
    
            #STEP 4
            Try
             {
              "Attempting to copy archive file from one to three"
                Copy-Item -path $IPS_OUTPUT_DIRECTORY -include "*.ready_to_archive" -Destination $BIZTALK_INCOMING_DIRECTORY
             }
            Catch [system.exception]
             {
                $ErrorMessage = $_.Exception.Message
                $FailedItem = $_.Exception.ItemName
                "Error in Step 4: $FailedItem : $ErrorMessage"
                Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop
                Break
             }
            Finally
             {
              "end of step 4"
    
               #STEP 5  
               Try
                 {
                    "Attempting to rename file from .ready_to_archive to .xml"      
                    Set-Location -Path $BIZTALK_INCOMING_DIRECTORY
                    Get-ChildItem *.$PREP_EXTENSION | Rename-Item -NewName { $_.Name -replace $PREP_EXTENSION,$ORIGINAL_EXTENSION }
                 }
                Catch [system.exception]
                 {                  
                    $ErrorMessage = $_.Exception.Message
                    $FailedItem = $_.Exception.ItemName
                    "Error in Step 5: $FailedItem : $ErrorMessage"
                    Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop
                    Break
    
                 }
                Finally
                 {
                    "end of step 5"
    
                    #STEP 6
                   Try
                     {
                      "Attempting to remove original file from One"
                        Remove-Item $IPS_OUTPUT_DIRECTORY + "*.ready_to_archive" -force #I need to specify the specific file not just any ready_to_archive file!!!!
                     }
                    Catch [system.exception]
                     {
                        $ErrorMessage = $_.Exception.Message
                        $FailedItem = $_.Exception.ItemName
                        "Error in Step 6: $FailedItem : $ErrorMessage"
                        Set-Location -Path $SCRIPT_DIRECTORY    -ErrorAction Stop
                        Break
                     }
                    Finally
                     {
                      "end of step 6"
                     } 
                }
            }
        }
     }
     "END OF SCRIPT"
    }
    
    这里是一个执行的屏幕截图:(好的,我并没有足够的代表点来添加屏幕截图,所以这里是一个输出的txt转储)


    此脚本中唯一有效的地方是文件夹“one”中的.xml文件被正确重命名为.ready_to_archive”,但没有其他操作。

    错误来自
    删除项$IPS_OUTPUT_DIRECTORY+“*.ready_to_archive”-force


    使用此代码:
    Remove Item-Path“$($IPS\u OUTPUT\u DIRECTORY)*.ready\u to\u archive”-force

    如果您需要此站点的帮助,您应该提供最少的代码,并确切地告诉您在哪里遇到问题。
    PS D:\Temp\archive> .\archive.ps1
    Attempting to rename file from .xml to .archive
    end of step 1
    Attempting to copy ready_to_archive file from One to Two
    end of step 2
    Attempting to rename files from .ready_to_archive to .archive
    end of step 3
    Attempting to copy archive file from one to three
    end of step 4
    Attempting to rename file from .ready_to_archive to .xml
    end of step 5
    Attempting to remove original file from One
    Error in Step 6:  : A positional parameter cannot be found that accepts argument '+'.
    end of step 6
    PS D:\Temp\archive>