[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

(已解决)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个文件夹,依次类推。
           
                                 论坛里找过一个类似的
  1.          @echo off
  2. for /f  "delims=" %%i in ('dir /b /ad') do (
  3. for /f  "delims=" %%a in ('dir /b /ad "%%i"') do ren "%%i\%%a" "%%i-%%a"
  4. )
  5. pause
复制代码
但是只能两级目录用。

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

TOP

  1. @echo off
  2. set "d=C:\A\B"
  3. rem 以上设置主目录
  4. cd "%d%"
  5. setlocal enabledelayedexpansion
  6. for /r /d %%a in (*) do (
  7.     set "has_dir=0"
  8.     for /f "delims=" %%i in ('dir /b /ad "%%a"') do set "has_dir=1"
  9.     if !has_dir! equ 0 (
  10.         set "p=%%a"
  11.         set "p=!p:~3!"
  12.         set "p=!p:\=-!"
  13.         echo ren "%%a" "!p!"
  14. rem 如测试确认,则删除以上echo执行
  15.         )
  16. )
  17. pause
复制代码

TOP

  1. set fso=createobject("scripting.filesystemobject")
  2. sub filetree(fdobject,name)
  3. set folders=fdobject.subfolders
  4. for each folder in folders
  5.          if folder.subfolders.count=0 then
  6. fso.movefolder folder.path,replace(folder.path,folder.name,name&"-"&folder.name)
  7. else
  8. name=name&"-"&folder.name
  9. filetree folder,name
  10. end if
  11. next
  12. end sub
  13. filetree fso.getfolder("这里填写目标目录","这里填写目标目录的目录名")
  14. '例:filetree fso.getfolder("c:/windows","windows")
复制代码
不知道好不好使 图个乐子
总之比以上的都要短

TOP

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

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "folder=C:\test"
  3. for /f %%i in ("%folder%") do set "name=%%~nxi"
  4. for /d /r "%folder%" %%i in (*) do (
  5.      set "f=1"
  6.      for /d %%i in ("%%i\*") do if defined f set "f="
  7.      if defined f (
  8.         set "newfilename=%%i"
  9.         set "newfilename=!newfilename:%folder%=%name%!"
  10.         ren "%%i" "!newfilename:\=-!"
  11.      )
  12. )
  13. pause
复制代码

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

返回列表