如何将一堆文件移动到每日创建文件夹

时间:2017-08-23 03:04:39

标签: powershell

我正在创建一个脚本来执行以下任务:

  1. 根据当前日期查找所有zip文件
  2. 将zip文件解压缩到临时文件夹
  3. 将所有提取文件的扩展名从dat重命名为txt
  4. 将所有重命名的.txt文件从Temporary文件夹移至每日创建文件夹
  5. 请参阅我的代码:

    $input = "U:\PS\Input"
    $TempZip = "U:\PS\ExtractedZip"
    $dest = "U:\PS\Output"
    $filelist = Get-ChildItem $input -Filter "*.Zip" -Recurse |
                Where-Object{$_.LastWriteTime -eq (Get-Date).AddDays(1)}
    $shell_app = New-Object -Com Shell.Application
    foreach ($file in $filelist) {
        $zip_file = $shell_app.NameSpace($file.FullName)           
        foreach ($item in $zip_file.Items()) {
            $shell_app.NameSpace($TempZip).CopyHere($item)
        }
        Get-ChildItem -Path $TempZip -Filter "*.dat" -Recurse |
            Rename-Item -NewName {[IO.Path]::ChangeExtension($_.Name, "txt")} -PassThru |
            Move-Item -Path "$TempZip\*.txt" -Destination "$dest\MM_YYYY\DD_MM_YYYY\Retail"
    }
    

    注意:MM_YYYY:当前月份和年份,例如August_2017DD_MM_YYYY:当前日期,例如23_08_2017

    例如:\August_2017\23_08_2017\Retail

    第二天将是:\August_2017\24_08_2017\Retail

    我遇到了第4任务,并想知道PowerShell可以将一堆文件移动到每日创建文件夹中(每天以\August_2017\23_08_2017\Retail格式创建一个新文件夹,第二天将{{1} })?

1 个答案:

答案 0 :(得分:1)

使用installation

从当前日期构建目标路径
$dest = "U:\PS\Output\{0:MMMM_yyyy}\{0:dd_MM_yyyy}\Retail" -f (Get-Date)

然后像这样移动文件:

Get-ChildItem -Path $TempZip -Filter "*.dat" -Recurse |
    Move-Item -Destination { Join-Path $dest ($_.BaseName + '.txt') }

您可以在移动时重命名文件,无需先使用Rename-Item