GetChildItem "C:\foo\bar" -Recurse -File | where { $_.Name -notmatch '[a-zA-Z_0-9^0-9]*(.pl|.xap|.go|.zip|.py|.tar|.gz|.tgz)' } | Compress-Archive -DestinationPath "C:\archive\xyz.zip"
Когда я выполняю команду GetChildItem
без перенаправления вывода, команда возвращает именно то, что мне нужно.Однако когда я перенаправляю вывод в Compress-Archive
, этот командлет не сохраняет структуру каталогов (все файлы архивируются в корне) \bar
и не включает все файлы, когда команда GetChildItem
выполняется изолированно.
Буду признателен за любой вклад.Обычно я использую команды Unix Shell, однако я ограничен моей средой.
Обновление (3/4/19):
GetChildItem "C:\foo\bar" -Recurse | where { $_.Name -notmatch '[a-zA-Z_0-9^0-9]*(.pl|.xap|.go|.zip|.py|.tar|.gz|.tgz)' } | Compress-Archive -DestinationPath "C:\archive\xyz.zip"
Удаление переключателя / аргумента -Fileустраняет проблему структуры папок, но файлы, которые я хочу игнорировать в переключателе -notmatch
, больше не игнорируются.В следующем примере:
/archive
-/a
-file.pl
-/b
-file.py
-file1.html
-index.html
-some_junk.zip
Эта команда выдаст следующий вывод:
VERBOSE: Preparing to compress...
VERBOSE: Performing the operation "Compress-Archive" on target "
C:\archive\a
C:\archive\b".
VERBOSE: Adding 'C:\archive\a\file.pl'.
VERBOSE: Adding 'C:\archive\b\file.py'.
VERBOSE: Adding 'C:\archive\b\file1.html'.
VERBOSE: Adding 'C:\archive\index.html'.
VERBOSE: Adding 'C:\archive\some_junk.zip'.
В этом случае файлы .py, .zip и .pl включаются в.zip