标题: (已解决)30元微信or支付宝:终级子目录以多级父目录名称命名 [打印本页]
作者: dylanwang 时间: 2023-4-20 19:26 标题: (已解决)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"
- )
- pause
复制代码
但是只能两级目录用。
作者: zaqmlp 时间: 2023-4-20 20:01
- <# :
- 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;
- }
- }
复制代码
作者: buyiyang 时间: 2023-4-20 21:04
- @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执行
- )
- )
- pause
复制代码
作者: jyswjjgdwtdtj 时间: 2023-4-20 22:34
- 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")
复制代码
不知道好不好使 图个乐子
总之比以上的都要短
作者: newswan 时间: 2023-4-21 01:02
本帖最后由 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
- }
- }
复制代码
第一行是 要处理的目录
如果正确 删除17行前的#
作者: terse 时间: 2023-4-21 12:42
- @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:\=-!"
- )
- )
- pause
复制代码
作者: dylanwang 时间: 2023-4-22 16:17
本帖最后由 dylanwang 于 2023-4-22 16:18 编辑
回复 2# zaqmlp
谢谢大佬,很好用。。。
下面几位朋友的我也试用了下,3.4.5楼的闪了一下未执行出结果。
6楼的会吃掉一级目录,不过我实在是不懂代码,或许是使用方法有误。总之谢谢几位。。。
作者: Batcher 时间: 2023-4-22 19:29
回复 7# dylanwang
5楼是PowerShell代码,执行的方法请参考:
http://bbs.bathome.net/thread-31071-1-1.html
作者: jyswjjgdwtdtj 时间: 2023-4-22 22:19
回复 7# dylanwang
三楼是vbs代码 保存为*.vbs 然后自己修改开头两个变量的内容
你也可以直接保存到vbs 然后用bat通过运行参数来
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |