批处理在当前目录的所有子目录中创建文件夹?
发布网友
发布时间:2022-04-19 12:21
我来回答
共1个回答
热心网友
时间:2023-07-06 12:29
不清楚你的实际文件/情况,仅以问题中的样例/说明为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
<# :
cls
@echo off
rem 将当前目录里的多个子文件夹下的最后一级文件夹的文件剪切/移动到以上几级文件夹名称连接组合成的字符串命名的新文件夹里
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~f0'"
echo;%#% +%$%%$%/%@% %z%
pause
exit
#>
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$folders1=@(dir -liter $path|?{$_ -is [System.IO.DirectoryInfo]});
for($i=0;$i -lt $folders1.length;$i++){
$folders2=@(dir -liter $folders1[$i].FullName -recurse|?{$_ -is [System.IO.DirectoryInfo]});
if($folders2.length -ge 1){
for($j=0;$j -lt $folders2.length;$j++){
$folders3=@(dir -liter $folders2[$j].FullName|?{$_ -is [System.IO.DirectoryInfo]});
if($folders3.length -eq 0){
$newname=$folders2[$j].FullName.substring($path.length+1).replace('\','-');
$newfolder=$path+'\'+$newname;
if(-not (test-path -liter $newfolder)){[void](md $newfolder -force)};
$files=@(dir -liter $folders2[$j].FullName|?{$_ -is [System.IO.FileInfo]});
for($k=0;$k -lt $files.length;$k++){
write-host ($files[$k].FullName.substring($path.length+1)+' --> '+$newname);
};
};
};
};
};