Board logo

标题: [文件操作] 批处理怎样把除第一个子文件夹以外的其他子文件夹内的文件剪切到第一个子文件夹? [打印本页]

作者: 无我居士    时间: 2023-4-7 10:23     标题: 批处理怎样把除第一个子文件夹以外的其他子文件夹内的文件剪切到第一个子文件夹?

以下是某大神帮我写的代码,
需要实现将:将当前目录里除了第一个子文件夹以外的其他子文件夹内的文件剪切后粘贴到第一个子文件夹里,然后删除第一个子文件夹以外的所有子文件夹
但是没有完全实现,请帮忙看看需要如何修改完善?!谢谢!!!
  1. <# :
  2. cls&echo off&mode con lines=5000
  3. rem 将当前目录里除了第一个子文件夹以外的其他子文件夹内的文件剪切后粘贴到第一个子文件夹里,然后删除第一个子文件夹以外的所有子文件夹
  4. set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
  5. title %#% +%$%%$%/%@% %z%
  6. cd /d "%~dp0"
  7. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
  8. echo;%#% +%$%%$%/%@% %z%
  9. pause
  10. exit
  11. #>
  12. $codes=@'
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Runtime.InteropServices;
  16. public static class ExpDir
  17. {
  18. [DllImport("Shlwapi.dll", CharSet=CharSet.Unicode)]
  19. public static extern int StrCmpLogicalW(string p1, string p2);
  20. public static string[] Sort(string[] f)
  21. {
  22. Array.Sort(f, StrCmpLogicalW);
  23. return f;
  24. }
  25. }
  26. '@;
  27. Add-Type -TypeDefinition $codes;
  28. [byte[]]$b=@(32,45,45,62,32);
  29. $c=[Text.Encoding]::Default.GetString($b);
  30. $self=get-item -liter $args[0];
  31. $path=$self.Directory.FullName;
  32. $folders=@(dir -liter $path|?{$_ -is [System.IO.DirectoryInfo]}|%{$_.Name});
  33. if($folders.length -ge 2){
  34. $arr=[ExpDir]::Sort($folders);
  35. for($i=1;$i -lt $arr.count;$i++){
  36. $folder=$path+'\'+$arr[$i];
  37. $files=@(dir -liter $folder -recurse|?{$_ -is [System.IO.FileInfo]});
  38. for($j=0;$j -lt $files.length;$j++){
  39. $newpath=$path+'\'+$arr[0]+$files[$j].Directory.FullName.substring($folder.length);
  40. if(-not (test-path -liter $newpath)){[void][IO.Directory]::CreateDirectory($newpath)};
  41. $newname=$files[$j].Name;
  42. $newfile=$newpath.trimend('\')+'\'+$newname;
  43. $n=2;
  44. while(test-path -liter $newfile){
  45. $newname=$files[$j].BaseName+' ('+$n.toString()+')'+$files[$j].Extension;
  46. $newfile=$newpath.trimend('\')+'\'+$newname;
  47. $n++;
  48. }
  49. $files[$j].FullName.substring($path.length)+$c+$newfile.substring($path.length);
  50. }
  51. }
  52. }
复制代码

作者: xp3000    时间: 2023-4-7 12:04

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM.保存ANSI编码的BAT文件
  4. set n=0
  5. @for /f "delims=" %%a in ('dir /a:d /b') do (
  6.     set /a n+=1
  7.     if !n! gtr 1 (
  8.         move "%~dp0%%a\*" "%~dp0!s!\"
  9.         rd /s /q "%~dp0%%a"
  10.         ) else (
  11.         set "s=%%a"
  12.         )
  13. )
  14. pause&exit /b
复制代码

作者: qixiaobin0715    时间: 2023-4-7 12:22

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b /ad') do (
  4.     if not defined Folder (
  5.         set Folder=%%i
  6.     ) else (
  7.         move "%%i\*.*" "!Folder!\"
  8.         rd "%%i"
  9.     )
  10. )
  11. pause
复制代码





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