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
,此 cmdlet 不保留目录结构(所有文件都存档在根目录),并且在单独执行命令\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 中