Re: [问题] 档名更改

楼主: Eveismywife (千元的小游侠)   2020-01-20 12:56:49
※ 引述 《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
所以程式码内容我也不一定全部都懂(?
如果有什么问题,欢迎在下面提出。

Links booklink

Contact Us: admin [ a t ] ucptt.com