Board logo

标题: [文件操作] 求助批处理移动文件至指定目录 [打印本页]

作者: lj670    时间: 9 小时前     标题: 求助批处理移动文件至指定目录

文件夹3内有若干mp3文件,根据“00.txt”文本列出的多个mp3文件名(每首一行,没有后缀名),从文件夹3移动至文件夹4内,如果有没找到的文件则创建一个"缺少.txt"文本并记录,我有一个脚本如下,可以根据文本移动文件,但对缺少的文件不能准确记录,求助各位大佬,谢谢!
  1. <# :
  2. echo off&cls
  3. rem 根据一个txt文本文件内列出的多个文件名,从一个指定文件夹里查找出相应的文件并剪切/移动到另一个文件夹里
  4. cd /d "%~dp0"
  5. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))))"
  6. echo;%#% +%$%%$%/%_% %z%
  7. pause
  8. exit
  9. #>
  10. $txtfile="00.txt";
  11. $oldfolder="C:\测试\3";
  12. $newfolder="C:\测试\4";
  13. if (-not (test-path -liter $txtfile)) {
  14.     write-host ('"'+$txtfile+'" not found');
  15.     exit;
  16. };
  17. if (-not (test-path -liter $oldfolder)) {
  18.     write-host ('"'+$oldfolder+'" not found');
  19.     exit;
  20. };
  21. if (-not (test-path -liter $newfolder)) {
  22.     [void](md $newfolder);
  23. };
  24. $dic = New-Object 'System.Collections.Generic.Dictionary[string,int]';
  25. $text = [IO.File]::ReadAllLines($txtfile, [Text.Encoding]::GetEncoding('GB2312'));
  26. for ($i = 0; $i -lt $text.count; $i++) {
  27.     $key = $text[$i].toLower();
  28.     if (-not $dic.ContainsKey($key)) {
  29.         $dic.Add($key, 0);
  30.     }
  31. }
  32. # 获取指定文件夹中的所有mp3文件信息
  33. $filesInFolder = @(dir -liter $oldfolder -Filter "*.mp3" |? { $_ -is [System.IO.FileInfo] });
  34. # 用于记录缺少的文件名
  35. $missingFiles = @();
  36. # 遍历00.txt中记录的文件名,检查是否在文件夹中有对应的mp3文件
  37. foreach ($line in $text) {
  38.     $fileNameToCheck = $line.Trim();
  39.     $found = $false;
  40.     foreach ($file in $filesInFolder) {
  41.         if ($file.Name -eq $fileNameToCheck) {
  42.             $found = true;
  43.             break;
  44.         }
  45.     }
  46.     if (-not $found) {
  47.         $missingFiles += $fileNameToCheck;
  48.     }
  49. }
  50. # 如果存在缺少的文件,将其记录到11.txt中
  51. if ($missingFiles.Count -gt 0) {
  52.     $missingFiles | Out-File -FilePath "11.txt"
  53. }
  54. # 移动找到的mp3文件到新文件夹
  55. foreach ($file in $filesInFolder) {
  56.     if ($dic.ContainsKey($file.Name.ToLower())) {
  57.         write-host $file.FullName;
  58.         $newfile = $newfolder.trimend('\') + '\' + $file.Name;
  59.         move-item -liter $file.FullName $newfile;
  60.     }
  61. }
复制代码

作者: 77七    时间: 1 小时前

  1. @echo off
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"
  4. set folder1=文件夹3
  5. set folder2=文件夹4
  6. (for /f "useback delims=" %%i in ("00.txt") do (
  7. if exist "%folder1%\%%i.mp3" (
  8. move "%folder1%\%%i.mp3" "%folder2%\" 1>nul
  9. ) else (
  10. echo %%i
  11. )
  12. )) > "缺少.txt"
  13. pause
复制代码





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