Advertisement
usamimi2323

多重フォルダ解消.vbs

Nov 14th, 2023
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VBScript 2.37 KB | Source Code | 0 0
  1. Option Explicit
  2. ' 多重フォルダ解消
  3. '
  4. ' 最上位フォルダから、フォルダ内がフォルダ一つでなくなるまで、階層を繰り上げる
  5. '
  6.  
  7. Dim fso,argc, arg_dir,i,topfolder
  8. If WScript.Arguments.Count = 0 Then
  9.     WScript.Echo("usage: this.vbs <フォルダ>" & vbCrlf _
  10.         & "       this.vbs <フォルダ> <フォルダ> <フォルダ>")
  11.     WScript.Quit()
  12. End If
  13.  
  14. Set fso = CreateObject("Scripting.FileSystemObject")
  15.  
  16. argc = WScript.Arguments.Unnamed.Count
  17. For i = 0 to argc - 1
  18.     arg_dir = WScript.Arguments.Unnamed(i)
  19.     If fso.FolderExists(arg_dir) <> false Then
  20.         If ( IsDriveLetter(arg_dir) ) Then
  21.             WScript.Echo("ドライブ名は指定できません: """ & arg_dir & """")
  22.         Else
  23.             topfolder = GetTopFolder(arg_dir)
  24.             If (0 <> StrComp(arg_dir, topfolder, vbTextCompare)) Then
  25.                 Dim tmp, f, deldir
  26.                 Dim post_dir
  27.                 Set post_dir = Nothing
  28.                
  29.                 Set f  = fso.GetFolder(topfolder)
  30.                 For Each tmp In fso.GetFolder(arg_dir).SubFolders
  31.                     Set deldir = tmp
  32.                 Next
  33.                
  34.                 For Each tmp in f.SubFolders
  35.                     If (fso.FolderExists( arg_dir & "\" & tmp.Name))  Then
  36.                         tmp.Name = "_" & tmp.Name
  37.                         fso.MoveFolder tmp.path, arg_dir & "\"
  38.                         Set post_dir = fso.GetFolder(arg_dir & "\" & tmp.Name)
  39.                     Else
  40.                         fso.MoveFolder tmp.path, arg_dir & "\"
  41.                     End If
  42.                 Next
  43.                 For Each tmp in f.Files
  44.                     fso.MoveFile tmp.path, arg_dir & "\"
  45.                 Next
  46.                 If fso.FolderExists(deldir.Path) Then
  47.                     fso.DeleteFolder deldir.Path, true
  48.                 End If
  49.                 If Not (post_dir Is Nothing) Then
  50.                     post_dir.Name = Mid(post_dir.Name, 2)
  51.                 End If
  52.                
  53.                 Set deldir = Nothing
  54.                 Set f = Nothing
  55.                 Set tmp = Nothing
  56.                 Set post_dir = Nothing
  57.             End If
  58.         End If
  59.     End If
  60. Next
  61. Set fso = Nothing
  62.  
  63. Function IsAlpha(c)
  64.     Dim x
  65.     x = Asc(c)
  66.     IsAlpha = CBool( (65<=x And x<=90) Or (97<=x And x<=122) )
  67. End Function
  68.  
  69. Function IsDriveLetter(p)
  70.     If ( ((3=Len(p)) And (":\"=Right(p,2)) And IsAlpha(Left(p,1))) _
  71.             Or ((2=Len(p)) And (":"=Right(p,1)) And IsAlpha(Left(p,1))) ) Then
  72.         IsDriveLetter = true
  73.     Else
  74.         IsDriveLetter = false
  75.     End If
  76. End Function
  77.  
  78. Function GetTopFolder(d)
  79.     Dim tmp, f, dirs
  80.     Set f = fso.GetFolder(d)
  81.     Set dirs = f.SubFolders
  82.     If (f.Files.Count = 0 And dirs.Count = 1) Then
  83.         For Each tmp In dirs
  84.             GetTopFolder = GetTopFolder(tmp.Path)
  85.         Next
  86.     Else
  87.         GetTopFolder = d
  88.     End If
  89. End Function
  90.  
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement