iT邦幫忙

0

如何取出將資料夾名稱更改成資料夾裡其中二個字元

  • 分享至 

  • xImage

想要使用批次檔變更名稱,但找不到相似的方法,所以向路過的好心人求救/images/emoticon/emoticon02.gif
例如:資料夾如下 (是資料夾喔~ 不是檔名)
D:\222\Test1\XXX01-AA
D:\222\Test1\XXX02-AB
D:\222\Test1\XXX03-AC
D:\222\Test2\YYY01-AA
D:\222\Test2\YYY02-AB
D:\222\Test2\YYY03-AC

想要取出其中二個字,更改資料夾名稱
D:\222\Test1\01
D:\222\Test1\02
D:\222\Test1\03
D:\222\Test2\01
D:\222\Test2\02
D:\222\Test2\02

別用批次檔BAT來做這種事,一件很簡單的事被弄的起級複雜,用PYTHON或POWERSHELL就很簡單
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
japhenchen
iT邦超人 1 級 ‧ 2022-04-29 07:55:00

我才說BAT把一件很簡單的事弄的很複雜,怪不得被linux海放幾十條街,還好十幾二十年前有想出對打產品,只是.........推倒不了腦子固化的開發者,認為BAT無敵....

以下是powershell(windows7以上都有)的改名示範,你自己改

Get-ChildItem C:\222 -Folder | ForEach-Object { $_ | Rename-Item -NewName $_.Name.SubString(4)}

上例有用到管線符號【|】是把左側的結果倒到右側指令裡,真的不難理解,改一改就可以用

0
Zero皇
iT邦研究生 3 級 ‧ 2022-04-29 09:32:04

這是一個笨拙土法煉鋼的方法,用淺薄的powerShell知識寫成的,但可以輕易自己實現

$mainDIR= "D:\222"
$level1 = Get-ChildItem -Path $mainDIR

for($i=0; $i -le $level1.length; $i++){
    if($level1[$i].Name -match 'TEST[0-9]+'){#TEST父資料夾
        $tempPath=$level1[$i].Name
        $level2 = Get-ChildItem -Path "$mainDIR\$tempPath"
        for($j=0; $j -le $level2.length; $j++){
          if($level2[$j].Mode -eq'd-----'){
          $tempName = $level2[$j].Name
          $newName = $tempName.SubString(3,2)
          echo "$mainDIR\$tempPath\$tempName change to $mainDIR\$tempPath\$newName"
          Rename-Item -Path $mainDIR\$tempPath\$tempName -NewName $newName
          }
        }
    }
}

0
喵凹咿唉思嗯
iT邦研究生 5 級 ‧ 2022-04-29 14:43:45

踹踹? 但如果子資料夾長度不一樣會出事XD

@ECHO OFF
setlocal EnableDelayedExpansion
cd\222
For /F %%A in ('dir /b /ad') do ( 
	cd %%A
	For /F %%B in ('dir /b /ad') do ( 
		set fromdir=%%B
		set todir=!fromdir:~3,2!
		echo !fromdir! to !todir!
		ren !fromdir! !todir!
	)
	cd ..
)
0
morningfungame
iT邦新手 5 級 ‧ 2022-04-30 13:46:42

不能用軟體嗎?
ant renamer很好用
配合regular expression的話變化更多

https://www.jinnsblog.com/2015/09/ant-renamer.html

我要發表回答

立即登入回答