[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】请问目录下同名的文件,不分后缀,如何移动到目录下同名文件夹?

本帖最后由 1139054012 于 2023-3-28 15:58 编辑

目录下有上百个文件,也有好几层子目录,文件名简体繁体日文,各种符号也可能都有,怎样能判断这么多不同类型文件名,并移动到同名文件夹?

因为文件名太多,这里举例几个简单的,实际英文,中文,日文全有
  1. 张三.txt
  2. 张三01.txt
  3. 张三 02.txt
  4. 张三-01.txt
  5. 张三.01.txt
  6. 张三,01.txt
  7. 张三,01.txt
  8. 张三!01.txt
  9. aaa张三.txt
  10. aaa张三01.txt
  11. aaa张三02.txt
  12. aaa张三-01.txt
  13. aaa张三.01.txt
  14. aaa张三,01.txt
  15. aaa张三,01.txt
  16. aaa张三!01.txt
  17. (102211)张三.txt
  18. (102211)张三![0012].txt
  19. 【102211】张三。03[001211].txt
  20. 【102211】张三,01[001220].txt
  21. 【102211】张三,02[001212].txt
  22. live o.txt
  23. live o .txt
  24. live o01.txt
  25. live o02.txt
  26. live o 01.txt
  27. live o 02.txt
  28. live-01.txt
  29. live.01.txt
  30. live,01.txt
  31. live,01.txt
  32. live!01.txt
  33. 01.live o.txt
  34. 01.live o01.txt
  35. 01-live o02.txt
  36. 01.live o-01.txt
  37. 01 live o.01.txt
  38. 01 live o,01.txt
  39. 01 live o,01.txt
  40. 01live o!01.txt
  41. (102211)live o.txt
  42. (102211)live o![0012].txt
  43. 【102211】live o。03[0012].txt
  44. 【102211】live o,01[0012].txt
  45. 【102211】live o,02[0012].txt
复制代码
PS: 这里的张三和 live o只是随便起的名,实际这里有可能是简体,有可能繁体,有可能英文,有可能日文,名称长度也不同,有可能包含01,02也有的不包含...


以上文件,有可能在当前目录下,也有可能在子目录下,后缀有可能pdf,有可能xls,xlsx等,如何能批量移动到名为 张三 和 live o的文件夹下呢?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 qixiaobin0715 于 2023-3-28 15:26 编辑

批处理文件另存为ANSI编码:
  1. @echo off
  2. set Folder="张三" "live o"
  3. for %%i in (%Folder%) do (
  4.     md %%i
  5.     for /f "delims=" %%j in ('dir /s /b /a-d "*%%~i*.*"') do move "%%j" "%%~i\"
  6. )
  7. pause
复制代码
1

评分人数

    • 1139054012: 感谢实现指定关键字批量移动同名文件夹技术 + 1

TOP

回复 2# qixiaobin0715


    感谢回复, 测试了下指定关键字可以批量移动指定同名文件夹,请问下如果没法单独指定关键字该如何批量移动同名文件夹,因为目录下上百个文件,关键字也上百个,如何能不需要指定关键字也能批量移动同名文件夹呢?

TOP

本帖最后由 qixiaobin0715 于 2023-3-28 15:51 编辑

你没有表达清楚,不指定关键字如何知道哪些是关键字呢?
退一步来说要移动文件到文件夹,那么这种文件夹是在当前文件夹下还是有可能会是下一层文件夹?

TOP

回复 1# 1139054012


有个逻辑问题你得先想清楚:
【张三丰】会不会被错误的移动到【张三】目录下?

我也是举个例子,真实情况你懂的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher

感谢提醒, 确实,模糊搜索这个问题没法避免,因为我常用关键字搜索,有的确实得缩短或延长字符才能找到,关于如何定义关键词和筛选,我有些思路了,打算先把文件名批量先导出表格,通过表格手动筛选遍,再用bat来批量移动

TOP

降序排列可以避免“张三丰”“张三”的问题。

TOP

感觉模糊搜索行不通

TOP

回复 6# 1139054012


    这个可以帮助找到关键词
  1. #@&cls&powershell -sta "gc '%~f0'|out-string|iex"&pause&exit
  2. $files = Get-ChildItem -Recurse -File
  3. Add-Type @"
  4. using System;
  5. namespace CS
  6. {
  7.     public static class LCS
  8.     {
  9.         public static string lcs(string a, string b)
  10.         {
  11.             var lengths = new int[a.Length, b.Length];
  12.             int greatestLength = 0;
  13.             string output = "";
  14.             for (int i = 0; i < a.Length; i++)
  15.             {
  16.                 for (int j = 0; j < b.Length; j++)
  17.                 {
  18.                     if (a[i] == b[j])
  19.                     {
  20.                         lengths[i, j] = i == 0 || j == 0 ? 1 : lengths[i - 1, j - 1] + 1;
  21.                         if (lengths[i, j] > greatestLength)
  22.                         {
  23.                             greatestLength = lengths[i, j];
  24.                             output = a.Substring(i - greatestLength + 1, greatestLength);
  25.                         }
  26.                     }
  27.                     else
  28.                     {
  29.                         lengths[i, j] = 0;
  30.                     }
  31.                 }
  32.             }
  33.             return output;
  34.         }
  35.     }
  36. }
  37. "@
  38. $lcsList = @()
  39. for ($i = 0; $i -lt $files.Count; $i++) {
  40.     for ($j = $i + 1; $j -lt $files.Count; $j++) {
  41.         $lcs = [CS.LCS]::lcs($files[$i].BaseName,$files[$j].BaseName)
  42.         if ($lcsList -notcontains $lcs) {
  43.         $lcsList += $lcs
  44.         Write-Output "$lcs"
  45.         }
  46.     }
  47. }
复制代码

TOP

返回列表