【发布时间】:2016-12-25 22:23:41
【问题描述】:
由于脚本应该从外部驱动器在不同的 Windows 计算机上运行,所以到目前为止我已经有了这个可执行的批处理文件: create_list.bat
:: http://www.howtogeek.com/204088/how-to-use-a-batch-file-to-make-powershell-scripts-easier-to-run/
@ECHO OFF
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "& '%~dpn0.ps1'"
echo+
echo Done! list.txt was created.
echo+
PAUSE
在powershell中执行这一行: create_list.ps1
Get-ChildItem | tree /F /A > list.txt
这很好用。 现在我想排除所有文件夹“VIDEO_TS”和“subs”。我怎样才能做到这一点? 我不固定使用 powershell/cmd,但它应该只需双击大多数较新的 Windows 系统即可运行(因此 .exe 也适合)。
我没有使用纯批处理,因为它会混淆所有特殊字符,例如变音符号 (äöü)。 tree 命令本身不支持更多参数,我对 powershell 完全不了解。 我尝试了 powershell 的 -Exclude 参数,但它要么不起作用,要么我搞砸了。
是否可以通过这种方式排除目录或文件(批处理 + powershell),还是我需要其他方法?
/edit1: 显示树
使用 PowerShell 社区扩展 (PSCX) 中的 show-tree cmdlet
。 "R:\电影\show-tree.ps1" 显示树 "R:\Filme" -MaxDepth 5 >> "R:\Filme\testlist.txt"在循环中结束,中间有这个错误(我翻译过):
错误调用方法,因为
[System.Collections.ObjectModel.Collection`1[[System.String, mscorlib,
版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]]
没有名为“SubString”的方法。
在 R:\Film\show-tree.ps1:136 字符:9
+ $RootRelativePath = $ProviderPath.SubString($d.PSDrive.Root.Length)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
/edit2:Powershell 版本信息
$psversiontable
名称值
---- -----
PS版本 4.0
WSManStackVersion 3.0
序列化版本 1.1.0.1
CLRVersion 4.0.30319.42000
构建版本 6.3.9600.17400
PSCompatibleVersions {1.0、2.0、3.0、4.0}
PSRemotingProtocolVersion 2.2
解决方案
从另一个批处理文件从aschipfl's answer 调用脚本:
chcp 1252
CALL aschipfl.bat >> list.txt
【问题讨论】:
-
您能否澄清一下,您需要排除所有目录,还是只排除您提到的两个文件夹? (无论哪种方式在 PS 中都很容易,但方法不同)
-
您要按名称还是按完整路径排除文件夹?
-
抱歉不够精确。我想排除名为“VIDEO_TS”的所有文件夹(和子文件夹/它们的内容)。同时我发现了一个不错的脚本show-tree.ps1,它似乎可以做我想做的事情,但我不知道如何让它运行。如果我通过
".\show-tree R:"调用它,则不会发生任何事情,甚至不会出现错误。 -
该文件中的第 38、41、44、45、155、156、157、158 和 159 行提供了示例命令。那些从驱动器号级别递归的命令,(多个例如),看起来不像你正在尝试的代码!
-
是的,我已经看过示例,但是一个错误告诉我该资源不包括在内,但可用。我应该使用“.\show-tree”。我将脚本修改为点包含 show-tree.ps1 并且它可以工作,但我只是得到一个运行或多或少无休止的命令窗口,而且我越来越多 ||||里面的人物。在 R:\ 上没有创建输出文件,我的命令是:
. R:\Filme\show-tree.ps1 show-tree R:\Filme -MaxDepth 5 >> testlist.txt
标签: windows powershell batch-file