昨天在" MMdd"中的日期,以及具体的输出文件夹选择,具体取决于日期

时间:2016-05-17 04:05:12

标签: sorting date powershell video ffmpeg

所以我试图管理闭路电视录像, 到目前为止,我已经在powershell中提出了这个代码:

获取MMdd中的昨天日期(今天的版本将是0516), - >选择以该开头的所有文件 - >使用ffmpeg压缩它们 - >移动到另一个文件夹 - >删除源fules

$a = get-date -format "MMdd"
$b = 1
$c = $a - $b
$d = $c.ToString("0000")
$inProcessPath = "sourcepath"
$oldVideos = Get-ChildItem -Include @("$d *") -Path $inProcessPath -Recurse;

Set-Location -Path 'D:\ffmpeg\bin';

foreach ($oldVideo in $oldVideos) {
    $newVideo = [io.path]::ChangeExtension($oldVideo.FullName, '.avi')


    $ArgumentList = '-i "{0}" -b 200000 "{1}"' -f $oldVideo, $newVideo;


    Start-Process -FilePath "D:\ffmpeg\bin\ffmpeg.exe" -ArgumentList $ArgumentList -Wait -NoNewWindow;
}

Robocopy D:\ffmpeg\bin\ntv D:\newpaths "$d *.avi" /mov

get-childitem "sourcepath" -include "$d *.mp4" -recurse | foreach ($_) {remove-item $_.fullname}

但是,在测试阶段,我意识到当有一个月的切换时我的实现不会工作,因为从0601开始它不会产生0531,而是0600。

此外,我需要根据当前月份将转换后的文件移动到目录,所以如果我有文件夹May,June等。我需要以05开头的文件转到May文件夹,依此类推。

有人可以通过代码或建议帮助我完成任务

我的编程知识不足以解决这个问题。

主要目标是自动化

第一部分由@dotnetom提供 这很有效:

$d = (get-date).AddDays(-1).ToString("MMdd")

对于第二部分,我已经提出了这个

    $a = (get-date).AddDays(-1).ToString("MMMM")

Robocopy D:\Main\AdWords\ffmpeg\bin\ntv "D:\path\$a" "$d *.avi" /mov

1 个答案:

答案 0 :(得分:1)

要获得前一天,您可以使用功能AddDays获取昨天的日期,然后根据您的需要对其进行格式化:

$d = (get-date).AddDays(-1).ToString("MMdd")

如果我们破坏了这段代码,那么组件就是:

$currentDay = get-date                 # current day
$yesterday = $currentDay.AddDays(-1)   # yesterday
$formattedYesterday = $yesterday.ToString("MMdd")  #yesterday formatted to MMdd