따라서 다음과 같은 디렉토리 구조가 있습니다.
parent/
└── sub1
| └── sub1.1
| | └── source
| | └── something1
| | └── something2
| |
| └── sub1.2
| └── source
| └── something3
| └── something4
└── sub2
└── sub2.1
| └── source
| └── something5
| └── something6
|
└── sub2.2
| └── source
| └── something7
| └── something8
|
└── sub2.3
└── source
└── something9
└── something10
source라는 이름의 모든 디렉터리에서 상대 상위/상위 디렉터리로 모든 파일(파일 이름이 다름)을 이동하고 싶습니다. 따라서 결과는 다음과 같아야 합니다.
parent/
└── sub1
| └── sub1.1
| | └── something1
| | └── something2
| |
| └── sub1.2
| └── something3
| └── something4
└── sub2
└── sub2.1
| └── something5
| └── something6
|
└── sub2.2
| └── something7
| └── something8
|
└── sub2.3
└── something9
└── something10
Linux 예제가 있지만 배치 버전을 따릅니다.
편집: 감사합니다. 작동할 것 같습니다. 원래는 아래가 있었지만 하나의 하위 폴더만 수행합니다.
@echo off
for /D %%I in ("%~dp0*") do (
if exist "%%I\source\*" (
move /Y "%%I\source\*" "%%I\" 2>nul
rd "%%I\source" 2>nul
)
)
답변1
다음은 작은 C# 프로그램입니다.
using System;
using System.IO;
namespace Move {
class Program {
static void Main(string[] args) {
Console.Write("Folder: ");
string path = Console.ReadLine();
foreach (var folders in Directory.GetDirectories(path)) {
Console.WriteLine(folders);
foreach (var subs in Directory.GetDirectories(folders)) {
Console.WriteLine($"\t{subs}");
foreach (var source in Directory.GetDirectories(subs)) {
Console.WriteLine($"\t\t{source}");
foreach (var item in Directory.GetFiles(source)) {
Console.WriteLine($"\t\t\t{item}");
string filename = Path.GetFileName(item);
string newPath = $@"{subs}\{filename}";
File.Move(item, newPath);
}
Directory.Delete(source);
}
}
}
Console.ReadLine();
}
}
}