Powershell管理系列(二十一)PowerShell操作之不同文件夹内文件合并

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

需求:服务器使用几年下来,发现我们的磁盘下有多个类似的文件夹,我们想把这个文件夹合并到一个指定的文件夹,并删除其他不在使用的文件夹。

步骤1、我们打开我们的服务器, D盘下有5个各年信息资料汇总的文件夹, 里面有些文件是一样的,有些是不一样的.如下图:

wKioL1TcHpGC9le1AAPNKXz4da4630.jpg

步骤2、搜索出这5个文件夹的文件,并把往年的文件夹逐一和最新的"15年信息资料汇总"进行比对,如文件名不一样则将其复制到"15年信息资料汇总"。

 

$total11=Get-ChildItem "d:\11年信息资料汇总"  | foreach {$_.name}  #不要遍历查找,子文件夹直接复制
$total12=Get-ChildItem "d:\12年信息资料汇总"  | foreach {$_.name}  #不要遍历查找,子文件夹直接复制$total13=Get-ChildItem "d:\13年信息资料汇总"  | foreach {$_.name}  #不要遍历查找,子文件夹直接复制$total14=Get-ChildItem "d:\14年信息资料汇总"  | foreach {$_.name}  #不要遍历查找,子文件夹直接复制$total15=Get-ChildItem "d:\15年信息资料汇总"  | foreach {$_.name}  #不要遍历查找,子文件夹直接复制

Get-childItem -Recurse -path "d:\15年信息资料汇总" -Include "复制文件日志.txt" | Clear-Content
foreach($a11 in $total11)
{
if($a11 -notin $total15)  #假如11年的文件夹里面的文件在15年文件夹里面均不存在,在从11复制到15
{Copy-Item  -Path "d:\11年信息资料汇总\$a11" -Recurse -Destination d:\15年信息资料汇总
write-host "在11年信息资料汇总中找到新文件 $a11 并复制到15年信息资料汇总" 
$a111="在11年信息资料汇总中找到新文件 $a11 并复制到15年信息资料汇总"
$a111| Out-File "D:\15年信息资料汇总\复制文件日志.txt" -Append -Encoding utf8  #输出到日志,方便比对
}
}

$total15=Get-ChildItem "d:\15年信息资料汇总"  | foreach {$_.name}  #因为15年文件夹已更新,所以需重新查找
foreach($a12 in $total12)
{
if($a12 -notin $total15) #假如12年的文件夹里面的文件在15年文件夹里面均不存在,在从12复制到15

{Copy-Item -Path "d:\12年信息资料汇总\$a12" -Recurse  -Destination d:\15年信息资料汇总
write-host "在12年信息资料汇总中找到新文件 $a12 并复制到15年信息资料汇总" 
$a222="在12年信息资料汇总中找到新文件 $a12 并复制到15年信息资料汇总"
$a222| Out-File "D:\15年信息资料汇总\复制文件日志.txt" -Append -Encoding utf8  #输出到日志,方便比对}
}

$total15=Get-ChildItem "d:\15年信息资料汇总"  | foreach {$_.name} #因为15年文件夹已更新,所以需重新查找
foreach($a13 in $total13)
{
if($a13 -notin $total15) #假如13年的文件夹里面的文件在15年文件夹里面均不存在,在从13复制到15

{Copy-Item -Path "d:\13年信息资料汇总\$a13" -Recurse  -Destination d:\15年信息资料汇总
write-host "在13年信息资料汇总中找到新文件 $a13 并复制到15年信息资料汇总" 
$a333="在13年信息资料汇总中找到新文件 $a13 并复制到15年信息资料汇总"
$a333| Out-File "D:\15年信息资料汇总\复制文件日志.txt" -Append -Encoding utf8  #输出到日志,方便比对

}
}

$total15=Get-ChildItem "d:\15年信息资料汇总"  | foreach {$_.name} #因为15年文件夹已更新,所以需重新查找
foreach($a14 in $total14)
{
if($a14 -notin $total15) #假如14年的文件夹里面的文件在15年文件夹里面均不存在,在从14复制到15

{Copy-Item -Path "d:\14年信息资料汇总\$a14" -Recurse  -Destination d:\15年信息资料汇总
write-host "在14年信息资料汇总中找到新文件 $a14 并复制到15年信息资料汇总" 
$a444="在14年信息资料汇总中找到新文件 $a14 并复制到15年信息资料汇总"
$a444| Out-File "D:\15年信息资料汇总\复制文件日志.txt" -Append -Encoding utf8 #输出到日志,方便比对

}
}

步骤3、执行后最终效果如下:

 

wKiom1TciVbDgOynAA8dhh6AqDY909.jpg

wKioL1Tcik6Bd-vVAAhnVR1cr7M320.jpg



本文转自 zhou_ping 51CTO博客,原文链接:http://blog.51cto.com/yuntcloud/1614132,如需转载请自行联系原作者


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
网络协议 网络安全
Powershell免杀(无文件落地免杀)
无文件落地 顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。 通过两种方式进行无文件落地的免杀,一种是出网的情况,另一种为不出网情况。 声明: 文章内容仅供网络安全爱好者学习使用,请勿用文章中提到的技术或工具做违法的事情,否则后果自负。
1169 0
|
4月前
|
存储 JSON JavaScript
|
4月前
PowerShell快速修改多个文件的名称
【8月更文挑战第28天】在PowerShell中批量重命名文件可通过以下方法实现:1)使用`Rename-Item`命令逐一重命名;2)通过循环批量处理特定模式的文件名更改;3)利用正则表达式进行复杂模式匹配与替换。操作前请确保验证命令并备份文件。
317 1
|
7月前
|
定位技术 Python
PowerShell批量修改、替换大量文件的文件名
PowerShell批量修改、替换大量文件的文件名
181 1
|
7月前
|
前端开发 微服务 Windows
PowerShell 命令窗口执行 pnpm 命令报错 无法加载文件 pnpm.ps1,因为在此系统上禁止运行脚本
PowerShell 命令窗口执行 pnpm 命令报错 无法加载文件 pnpm.ps1,因为在此系统上禁止运行脚本
|
Windows
powershell配置anaconda及解决【无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本】的问题
powershell配置anaconda及解决【无法加载文件C:\Users\xxx\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本】的问题
2653 0
|
Windows
PowerShell和cmd区别以及在文件夹快速打开cmd窗口的几种方法
PowerShell和cmd区别以及在文件夹快速打开cmd窗口的几种方法
179 0
|
安全 Linux 网络安全
新一代--Powershell 无文件挖矿病毒
Powershell 无文件挖矿病毒
|
存储 运维 Linux
【运维】PowerShell编程 目录文件相关方法的封装与案例详解
本文实现一个目录管理类,归纳了 Powershell 中常用的文件路径方法。这些方法可以迅速方便的用于 Powershell 编写大型运维脚本中。以简单使用为目的封装常用目录文件操作。完成源代码在作者的github上可以找到。
203 0
|
弹性计算 关系型数据库 数据库
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库
本文介绍如何通过ROS部署ECS+RDS+SqlServer资源,以及如何通过PowerShell操作SqlServer数据库。 注意:附录模板和截图中的commandtext部分仅为演示作用,请根据需求修改后使用。
使用ROS部署ECS+SqlServer资源并通过PowerShell操作数据库