返回列表 发帖

(已解决)30元微信or支付宝:终级子目录以多级父目录名称命名

本帖最后由 dylanwang 于 2023-4-22 16:19 编辑

说明如下:
            A/B/C/D/E/F/0001为目录结构,把0001重命名为A-B-C-D-E-F-0001这种结构,父文件夹名称不要改动。另外B文件夹下有可能有C1,C2,C3个文件夹,依次类推。
           
                                 论坛里找过一个类似的
         @echo off
for /f  "delims=" %%i in ('dir /b /ad') do (
for /f  "delims=" %%a in ('dir /b /ad "%%i"') do ren "%%i\%%a" "%%i-%%a"
)
pauseCOPY
但是只能两级目录用。

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
set "current=%cd%"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
pause
exit
#>
$current=($env:current).trimend('\');
$folders=@(dir -literal $current -recurse|?{$_ -is [System.IO.DirectoryInfo]}|sort {$_.FullName.length} -Descending);
for($i=0;$i -lt $folders.length;$i++){
    $subfolders=@(dir -literal $folders[$i].FullName|?{$_ -is [System.IO.DirectoryInfo]});
    if($subfolders.length -eq 0){
        $folderpath=$folders[$i].FullName.Substring($current.length+1)
        $newname=$folderpath.replace("\", "-");
        $newfolder=$folders[$i].Parent.FullName.trimend('\')+'\'+$newname;
        write-host ($folderpath+' --> '+$newname);
        move-item -literal $folders[$i].FullName $newfolder -ErrorAction SilentlyContinue;
    }
}COPY
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

@echo off
set "d=C:\A\B"
rem 以上设置主目录
cd "%d%"
setlocal enabledelayedexpansion
for /r /d %%a in (*) do (
    set "has_dir=0"
    for /f "delims=" %%i in ('dir /b /ad "%%a"') do set "has_dir=1"
    if !has_dir! equ 0 (
        set "p=%%a"
        set "p=!p:~3!"
        set "p=!p:\=-!"
        echo ren "%%a" "!p!"
rem 如测试确认,则删除以上echo执行
        )
)
pauseCOPY

TOP

set fso=createobject("scripting.filesystemobject")
sub filetree(fdobject,name)
set folders=fdobject.subfolders
for each folder in folders
         if folder.subfolders.count=0 then
fso.movefolder folder.path,replace(folder.path,folder.name,name&"-"&folder.name)
else
name=name&"-"&folder.name
filetree folder,name
end if
next
end sub
filetree fso.getfolder("这里填写目标目录","这里填写目标目录的目录名")
'例:filetree fso.getfolder("c:/windows","windows")COPY
不知道好不好使 图个乐子
总之比以上的都要短
你好

TOP

本帖最后由 newswan 于 2023-4-21 01:04 编辑
$fld = "."
if ( $fld -like "?:*" ) {
$p = $fld
} else {
$p = Join-Path $PSScriptRoot $fld
}
Set-Location $p
[string]$p = Get-Location
Get-ChildItem -Recurse -Directory $p | ForEach-Object {
if ( -not ( Get-ChildItem -Directory -Path $_.fullname )) {
$p2 = $_.fullname.Substring( $p.Length +1 )
$NewName = Join-Path $_.Parent.FullName ( $p2 -replace "\\","-" )
Write-Host "--" $_.fullname.Substring( $p.Length +1 )
write-Host "  " $NewName.Substring( $p.Length +1 )
# Rename-Item $_.fullname -NewName $NewName
}
}COPY
第一行是 要处理的目录
如果正确 删除17行前的#

TOP

@echo off&setlocal enabledelayedexpansion
set "folder=C:\test"
for /f %%i in ("%folder%") do set "name=%%~nxi"
for /d /r "%folder%" %%i in (*) do (
     set "f=1"
     for /d %%i in ("%%i\*") do if defined f set "f="
     if defined f (
        set "newfilename=%%i"
        set "newfilename=!newfilename:%folder%=%name%!"
        ren "%%i" "!newfilename:\=-!"
     )
)
pauseCOPY

TOP

本帖最后由 dylanwang 于 2023-4-22 16:18 编辑

回复 2# zaqmlp


    谢谢大佬,很好用。。。

下面几位朋友的我也试用了下,3.4.5楼的闪了一下未执行出结果。
6楼的会吃掉一级目录,不过我实在是不懂代码,或许是使用方法有误。总之谢谢几位。。。

TOP

回复 7# dylanwang


5楼是PowerShell代码,执行的方法请参考:
http://bbs.bathome.net/thread-31071-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# dylanwang


    三楼是vbs代码 保存为*.vbs 然后自己修改开头两个变量的内容
你也可以直接保存到vbs 然后用bat通过运行参数来
你好

TOP

返回列表