Re: [問題] 檔名更改

看板Programming作者 (千元的小遊俠)時間4年前 (2020/01/20 12:56), 4年前編輯推噓1(100)
留言1則, 1人參與, 4年前最新討論串5/7 (看更多)
※ 引述 《ddavid (謊言接線生)》 之銘言: :   : ※ 引述《JokePtt (思辨成魔)》之銘言: : : https://i.imgur.com/3r69LqW.jpg
: : 不好意思 又上來叨擾各位 : : 我用軟體把pdf轉jpg 生成了數千個子資料夾  : : (1)我想把檔案全部一次命名 圖中B部分比如是caseABC以下數千個子目錄下的檔案 : : 圖中A部的hottest只是其一子目錄 如當中檔案1.jpg 2.jpg 3.jpg 檔案數不 : 固定 : : 重命名為 子目錄名 + 分隔號 _ + 檔案流水號*2-1 : : 如 hottest_1.jpg hottest_3.jpg hottest_5.jpg... : : 在B部分的caseABC下所有子目錄檔案皆找各自的子目錄(A部分名)重新命名 : : 該如何用cmd或powershell?? : : (2)我要將F:\Data\Projects\caseABC 數千個子目錄下改好名的各檔案 : : 一起移至與B同階的 子目錄1 以圖例是 F:\Data\Projects\1 : : 又該怎麼下指令?! : : 當然移完後的動作 我會直接在caseABC上點內容 確認沒有檔案後移除 : : 再把資料夾 1 改名為 caseABC 手動就可以完成 : : 只是前兩點對於數千個生成的資料夾 及裡面總數上萬個檔案 : : 有點不知所措 還請各位賢德不吝賜教 感恩 : 我還是先講一下如果沒有那個流水號*2-1取代問題的話,只靠cmd完成的方法。 : 我cmd沒熟到那個程度,也許有人知道cmd就能搞定完整要求的方式XD :   : 在caseABC裡面建立個批次檔(就假定是ren_and_move.bat吧),內容為: :   :   : for /d %%i in (*) do ( : cd %%i : for %%j in (*) do ren %%j %%i_%%j : cd .. : mv %%i F:\Data\Projects\1 : ) :   :   : 第一行跟上一個回答前半很像,但加入 /d 是表示找的不是檔名而是子目錄。 :   : 找到了caseABC下面的一個子目錄名取代後面四行裡面全部的%%i後,第二行進去 : 那個子目錄。 雖然你們好像要cmd。 不知道powershell行不行XD 第一次回別人文,初體驗就給你了XD 如果哪邊違反版規提醒我一下,謝謝。 過年有點無聊 看看PTT還有什麼有趣的板。 剛好翻到這裡,看到這篇文蠻有趣的,想幫忙解決看看。 不過我根本完全不懂bat更別說powershell,但是我對於bash shell略懂略懂。 所以我就依照那邊的知識來寫寫看powershell,XD 題外話: powershell寫起來一點都不power阿(? 我覺得好難寫QAQ 先放程式碼: $Data_Location = "C:\Data\Projects\" $move_dir = "C:\Data\1" #檢查目錄 if (!(Test-Path -Path $move_dir )) { $wsh = New-Object -ComObject WScript.Shell $answer = $wsh.Popup("你要移動的目的地不存在,你這87,腳本將結束", 20, "路徑問 題", 32) exit } if (!(Test-Path -Path $Data_Location )) { $wsh = New-Object -ComObject WScript.Shell $answer = $wsh.Popup("你的Data目錄不存在,你這87,腳本將結束", 20, "路徑問題", 32) exit } #取得第一層目錄名 $l = Get-ChildItem $Data_Location | ?{$_.psiscontainer -eq $true} | select-objec t name foreach ($i in $l){ cd $i.name #取得第二層目錄名 $f = Get-ChildItem ($Data_Location + $i.name.ToString()) | ?{$_.psiscontaine r -eq $false} | select-object name foreach ($j in $f){ $tmp = $j.name.ToString() $result = ([int]$tmp.SubString(0,$tmp.LastIndexOf('.'))) * 2 - 1 $result = ([String]$result) + ".jpg" #檔案新名子 $newname = $i.name.ToString() + "_" + $result write-host ("Your file new name is: " + $newname) #重新命名 %{Rename-Item $tmp -NewName ($newname -f $c++)} #移動命名好的檔案到別的目錄 Move-Item ($Data_Location + $i.name.ToString() + "\" + $newname ) -Desti nation $move_dir } cd .. } 先說,因為我不懂powershell,所以程式碼都是複製網路教學再經過小改而成XD 所以程式碼內容我也不一定全部都懂(? 如果有什麼問題,歡迎在下面提出。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.185.118 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1579496211.A.E58.html ※ 編輯: Eveismywife (122.116.185.118 臺灣), 01/20/2020 13:43:43

01/26 13:50, 4年前 , 1F
看到一堆87 qq
01/26 13:50, 1F
文章代碼(AID): #1U9JCJvO (Programming)
文章代碼(AID): #1U9JCJvO (Programming)