如何编写引用文本列表、仅复制非列表内文件的Powershell脚本
实现方案
完整可运行脚本
你只需要修改前3个变量的路径为你自己的实际路径即可运行:
# 配置路径:替换为你自己的实际路径 $nameListPath = "C:\path\to\your\filename_list.txt" # 之前存储文件名的文本文档路径 $sourceDir = "C:\path\to\source\folder" # 要扫描提取文件的源目录 $targetDir = "C:\path\to\target\folder" # 复制到的目标目录 # 读取排除文件名列表,自动处理空格、空行、重复项 $excludeFileNames = Get-Content -Path $nameListPath | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" } | Select-Object -Unique # 遍历源目录文件,复制不在排除列表内的文件 Get-ChildItem -Path $sourceDir -File | ForEach-Object { if ($excludeFileNames -notcontains $_.Name) { Copy-Item -Path $_.FullName -Destination $targetDir -Force } }
可选调整说明
- 如需递归扫描源目录下所有子文件夹的文件,给
Get-ChildItem命令添加-Recurse参数即可 - 不需要覆盖目标目录的同名文件时,删除
Copy-Item后的-Force参数 - 首次运行可先替换
Copy-Item行为为Write-Host "待复制文件:$($_.Name)",预览符合预期后再执行实际复制操作 - 脚本默认适配Windows文件系统的大小写不敏感规则,不需要额外处理文件名大小写差异
内容的提问来源于stack exchange,提问作者Todd
相关产品推荐
相关产品推荐

