Заархивируйте пустую папку, если в этот день нет файлов - PullRequest
0 голосов
/ 05 февраля 2020

Код:

$timestamp = (Get-Date).ToString('yyyy-MM-dd')
$originalSource = Get-ChildItem "D:\output\csv\*.csv", "D:\output\csv\Billing\*.csv" | Where-Object {($_.LastWriteTime -ge [datetime]::today)}
$source = $originalSource
$target = "D:\output\csv\bin\$timestamp.7z"
$housekeepZipFile = "D:\output\csv\bin\*"


####Using 7z to zip 
if (-not (test-path "D:\bin\7-Zip\7z.exe")) {throw "D:\bin\7-Zip\7z.exe needed"}
set-alias sz "D:\bin\7-Zip\7z.exe"
sz a -mx=0 -mhe=on -m0=lzma2 $target $source

Я пробовал выше PowerShell. Когда я закачал файлы в папку csv и биллинга, он создаст нужный мне архивный файл. Когда нет входного файла с текущей датой, закачанного в папку csv и биллинга, 7zip файлы случайного выбора и создания архива для меня.

Вопрос: Как я могу настроить создание архива только при наличии файла с текущей датой или создать архив (с пустой папкой), если нет файла с текущей датой. P / S: я пытался поместить объект where для фильтрации lastwritetime, но, похоже, недостаточно полезен.

1 Ответ

0 голосов
/ 05 февраля 2020

вам просто нужно добавить if после вызова Get-ChildItem

$timestamp = (Get-Date).ToString('yyyy-MM-dd')
$originalSource = Get-ChildItem "D:\output\csv\*.csv", "D:\output\csv\Billing\*.csv" | Where-Object {($_.LastWriteTime -ge [datetime]::today)}
if($originalSource) {
  $source = $originalSource
  $target = "D:\output\csv\bin\$timestamp.7z"
  $housekeepZipFile = "D:\output\csv\bin\*"


  ####Using 7z to zip 
  if (-not (test-path "D:\bin\7-Zip\7z.exe")) {throw "D:\bin\7-Zip\7z.exe needed"}
  set-alias sz "D:\bin\7-Zip\7z.exe"
  sz a -mx=0 -mhe=on -m0=lzma2 $target $source
}

, поэтому только если файлы найдены, архив будет создан

...