iT邦幫忙

1

CMD使用For批次命名總有一個會重複

  • 分享至 

  • xImage

大家好,
我只想要用簡易指令批次重新命名檔案.
for %i in (*.txt) do ren "%i" "abc%i"

但是第一個檔案會重複命名
d:\tmpp>for %i in (.txt) do ren "%i" "abc%i"
d:\tmpp>ren "001.txt" "abc001.txt"
d:\tmpp>ren "002.txt" "abc002.txt"
d:\tmpp>ren "004.txt" "abc004.txt"
d:\tmpp>ren "abc001.txt" "abcabc001.txt"
-->明明001.txt 已經重新命名了, 為何最後會再命名一次.
我不太了解為何如此. 我使用 for %i in (
.txt) do echo %i >>d:\test.txt
匯出的txt 內容確實只有三個檔案名
abx001.txt
abx002.txt
abx004.txt

為何重新命名會有一個重複??

re.Zero iT邦研究生 5 級 ‧ 2023-03-03 20:32:10 檢舉
https://stackoverflow.com/questions/31975093/at-which-point-does-for-or-for-r-enumerate-the-directory-tree
https://stackoverflow.com/questions/66168838/for-loop-runs-twice-but-only-for-the-first-file
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
zcm
iT邦研究生 3 級 ‧ 2023-03-03 15:01:46
最佳解答

可能是【wildcard 萬用字元】的BUG
要精準使用【wildcard 萬用字元】的規則就能逹到您要的結果
您的例子只要用前三個字元為基準則可如下:
for %i in (???.txt) do ren "%i" "abc%i"

原來如此!感謝!

1
copemoe
iT邦研究生 1 級 ‧ 2023-03-01 12:09:21

根據網路上查的資料

當你使用 for %i in (*.txt) do ren "%i" "abc%i" 這條命令時,它會將所有副檔名為 .txt 的檔案重新命名為 "abc" + 檔案名稱 的形式。

當 for 指令執行時,它會將每個符合條件的檔案名稱存到 %i 變數中,然後對每個 %i 變數的值進行 ren 命令。

在 ren 命令中,你使用 "abc%i" 作為新檔名。因此,對於檔案 001.txt,它會被命名為 abc001.txt。接下來,當 for 指令處理到 002.txt 時,它會執行命令 ren "002.txt" "abc002.txt"。這是沒有問題的。但當 for 指令處理到 abc001.txt 時,它會執行命令 ren "abc001.txt" "abcabc001.txt"。這就是為什麼你看到 abc001.txt 重複出現的原因。

我不了解就是這點,
請問001.txt已經被命名為abc001.txt. 為何他還會再次重命名一次?

我要發表回答

立即登入回答