发布网友
共2个回答
热心网友
不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI
---------------------------------------------------------------------
<# :
cls&echo off&mode con lines=5000
rem 将一个指定目录下多个子文件夹里的所有文件剪切/移动到该目录下
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$b=[Convert]::FromBaseString("IC0tPiA=");
$c=[Text.Encoding]::Default.GetString($b);
$path="D:\xxx\文件夹A";
if(-not (test-path -liter $path)){write-host ('"'+$path+'" 未找到');exit;};
$folders=@(dir -liter $path -recurse|?{$_ -is [System.IO.DirectoryInfo]});
for($i=0;$i -lt $folders.length;$i++){
$files=@(dir -liter $folders[$i].FullName|?{$_ -is [System.IO.FileInfo]});
for($j=0;$j -lt $files.length;$j++){
$m=2;
$newname=$files[$j].Name;
$newfile=$path+'\'+$newname;
while(test-path -liter $newfile){
$newname=$files[$j].BaseName+' ('+$m.toString()+')'+$files[$j].Extension;
$newfile=$path+'\'+$newname;
$m++;
}
$files[$j].FullName.Substring($path.length)+$c+$newfile.Substring($path.length);
}
}追问想要的功能其实就是,批量提取子文件件里面的所有文件到最上层文件夹中,同时保留所有相同名称的文件,现在运行BAT文件提示找不到 “文件夹A”
热心网友
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir/s/b/a-d') do (
set s=%%~dpnxi
set s=!s:%~dp0=!
set s=!s:\=_!
if exist "%~dp0%%~nxi" (move "%%~dpnxi" "%~dp0!s!") else (move "%%~dpnxi" "%~dp0%%~nxi")
)来自:求助得到的回答