用linux的bash script
#!/bin/bash
WORK_PATH="/the/path/of/scan/pdf/files"
for WORK_FILE in "$WORK_PATH"/scan[0-9][0-9][0-9]\.pdf; do
if [ -e "$WORK_FILE" ]; then
mv "$WORK_FILE" \
"$(date -d "$(stat -c %y "$WORK_FILE")" +%Y%m%d%H%M%S).pdf"
fi
done
樓上已經有人提到在linux並沒有檔案的creation time,所以這裏是用modification time。
另外有人提到如果在1秒內有多於1個掃描檔的情況下會撞名,那麼一個方法是將檔名的秒數精確到十分位或百分位或千分位,另外一個方法是加流水號。最相容的方法應該是加流水號
#!/bin/bash
WORK_PATH="/the/path/of/scan/pdf/files"
for WORK_FILE in "$WORK_PATH"/scan[0-9][0-9][0-9]\.pdf; do
if [ -e "$WORK_FILE" ]; then
WORK_FILE_NEW="$(date -d "$(stat -c %y "$WORK_FILE")" +%Y%m%d%H%M%S)"
if [ -e "$WORK_FILE_NEW".pdf ]; then
NEW_SN=2
while [ -e "$WORK_FILE_NEW"-${NEW_SN}.pdf ]; do
let NEW_SN++
done
mv "$WORK_FILE" "$WORK_FILE_NEW"-${NEW_SN}.pdf
else
mv "$WORK_FILE" "$WORK_FILE_NEW".pdf
fi
fi
done
這裏是在有撞名時才開始加流水號,流水號從2開始。
所以只要擇一把WORK_PATH設定到pdf檔案的目錄然後存起來再加個可執行屬性就行了。不過呢,提供的script幾乎沒有錯誤檢查,有需要的話樓主要自己加強一下了。
DOS的話可參考
撈取scanXXX.pdf
DOS批次檔執行根目錄下不同資料夾的執行檔
取得檔案日期時間
How to get creation date of file on Windows command line?
Get creation time of file in milliseconds
改名
rename 原檔名 新檔名
在linux裡面先用stat取得creation time
然後在用date轉成你要的格式
date +%Y%m%d%H%M%S -d "$(stat -c %x xxx.txt)"
最後在重新命名
rm or rename
何不用python當sh或進階版的批次檔看待?I/O跟資料庫的資源都十分齊全,你要做的【掃描→文字辨識→檔名編成→轉檔→儲存】也游刃有餘,linux/WindowsCMD也都能用,語法也比Linux bash script/DOS BATCH更好閱讀