gpt4 book ai didi

powershell - 从文件副本中排除接合点

转载 作者:行者123 更新时间:2023-12-03 00:18:15 26 4
gpt4 key购买 nike

我要执行的操作:在删除配置文件之前,将用户配置文件的内容复制到其他位置作为备份。

我如何尝试:将powershell与copy-item -recurse -path profileName一起使用

有什么方法可以排除接合点?

我当然可以从连接点得到一些奇怪的东西。我想最好的办法是复制包括连接点在内的所有内容,但是即使我必须排除它们以使其正常工作,在恢复配置文件时也可以小心地将它们留在原处,因为我不会经常这样做(希望永远不会)。无论如何,我都可以使用-exclude并命名在配置文件根目录中找到的所有交接点,但是然后有子文件夹交接点,例如appdata \ local \ application data。该文件夹实际上将成功地循环复制,直到文件夹名称变得太大为止。极大的失败。无论如何,如果我可以做类似-filter {$ _。attributes -notmatch“ReparsePoint”}这样的事情,那将是非常棒的,但是当然filter仅适用于针对文件/文件夹名称的字符串。如果使用Get-ChildItem -path profileLocation,则必须使用-force,否则将丢失任何隐藏的/系统文件。但这也意味着我将获得无法用此命令读取的相同交接点,并且会产生错误,然后再使用管道Where-Object过滤该管道并将其复制到副本项。另外,我猜这种方法真的很慢。因此,无论哪种方式,看来唯一的选择就是使用-exclude并键入所有子文件夹的交接点。再简单不过了吗?

我应该放弃Powershell命令并使用Robocopy.exe吗?

最佳答案

当然,使用robocopy更为简单。使用PS可以执行的操作是从win32_volume中获得安装点列表(搜索没有驱动器号的卷)。然后,您可以排除路径与该名称匹配的任何文件。
像这样的东西:

$exclude=gwmi win32_volume |?{$_.driveletter -eq $null} |select -expand name 
ls C:\mountpoints\ -Recurse |%{
if( $_.PSIscontainer -eq $true) {$dir=$_.fullname}
else {$dir=$_.directoryname}
if ($exclude.trim('\') -notcontains $dir){ #copy here}}

关于powershell - 从文件副本中排除接合点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28146207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com