Board logo

标题: [文件操作] 求助批处理文本与文件夹的文件名找不同,并且删除 [打印本页]

作者: 意外之外    时间: 2022-7-12 10:28     标题: 求助批处理文本与文件夹的文件名找不同,并且删除

这个文件夹下的文件名称,与文本里面最后的文件名称进行核对?能快速找回来文件夹里面多余的,或者文档里面多余的?
目前的情况是,每个文件夹的索引文件和图片文件不匹配,比如索引文件200行,图片文件180个,或者索引文件180个,图片文件200个
然后在进行删除索引文件的那一行和文件夹里面的图片,保持索引文件和图片文本一致。
如果不行,或者只删除索引文件最后的文件名称(红色框)和图片文件,回头筛选文本去手动删也行。
其实目的只是让保持索引文件和图片文件一致。
这种bat能实现吗?求助大佬们!
图片上传不了不知道为啥,QQ空间的也不显示。。愁死了。。放个链接。。
http://m.qpic.cn/psc?/V506iZXy0KgcUx0r2DOl2f3Gtm1t968X/bqQfVz5yrrGYSXMvKr.cqX5LeLRQHhebz3SHmYfloTEDtFKIlhUBpp0VuoRIsTmjbKvmz7lUTPxa*NqApdrA8KG28iZvvgahm.21.n0eVoQ!/b&bo=ZQV5AQAAAAABFyg!&rf=viewer_4
作者: flashercs    时间: 2022-7-12 12:29

  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -C "Set-Location -LiteralPath ([Environment]::CurrentDirectory);. ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~f0\" -ReadCount 0 | Out-String)))"
  5. pause
  6. exit /b
  7. #>
  8. Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object {
  9.   $datafile = Join-Path -Path $_.FullName -ChildPath "DATA_$($_.Name).txt"
  10.   $jpgs = @($_ | Get-ChildItem | Where-Object { $_.Extension -eq '.jpg' } | Select-Object -Property @{
  11.       Name       = 'jpgName'
  12.       Expression = { $_.Name }
  13.     }, @{
  14.       Name       = 'FullName'
  15.       Expression = { $_.FullName }
  16.     })
  17.   $lines = Get-Content -ReadCount 0 -LiteralPath $datafile
  18.   $header = $lines[0]
  19.   $linesdata = @($lines | Select-Object -Property @{
  20.       Name       = 'jpgName'
  21.       Expression = {
  22.         if ($_ -match '\|([^|]*)$') {
  23.           $Matches[1]
  24.         }
  25.       }
  26.     }, @{
  27.       Name       = 'line'
  28.       Expression = { $_ }
  29.     } -Skip 1)
  30.   $comp = Compare-Object -ReferenceObject $linesdata -DifferenceObject $jpgs -Property jpgName -IncludeEqual -PassThru
  31.   $(
  32.     $header
  33.     foreach ($item in $comp) {
  34.       if ($item.SideIndicator -eq '==') {
  35.         # 匹配与jpg相同的行
  36.         $item.line
  37.       } elseif ($item.SideIndicator -eq '=>') {
  38.         # 删除多余的jpg
  39.         Remove-Item -LiteralPath (Join-Path -Path $_.FullName -ChildPath $item.jpgName) -Verbose
  40.       }
  41.     }) | Set-Content -LiteralPath $datafile
  42. }
复制代码
脚本放到2022文件夹下, 保存为ANSI编码; 先找测试目录,以免删除文件错误.
作者: 意外之外    时间: 2022-7-12 15:55

已测试没问题,太NB了,非常感谢大佬的帮助!
作者: Batcher    时间: 2022-7-12 20:45

回复 1# 意外之外


如果需要发图片,请使用图床:
http://bbs.bathome.net/thread-60985-1-1.html




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2