我想使用命令提示符爲前綴'g_x_'重命名文件。原始文件名的結構是:.7k文件批量重命名
000_1565.7k
我曾嘗試:
ren *.7k g_x_*.7k
該代碼將文件重命名爲「g_x_1565.7k」,但我真的需要的文件被命名爲'g_x_000_1565.7k'
關於爲什麼代碼丟失部分原始文件名的任何想法?
感謝,
DH
我想使用命令提示符爲前綴'g_x_'重命名文件。原始文件名的結構是:.7k文件批量重命名
000_1565.7k
我曾嘗試:
ren *.7k g_x_*.7k
該代碼將文件重命名爲「g_x_1565.7k」,但我真的需要的文件被命名爲'g_x_000_1565.7k'
關於爲什麼代碼丟失部分原始文件名的任何想法?
感謝,
DH
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN (
'dir /b /a-d *_*.7k ^|findstr /v /b /l "g_x_" '
) DO (
REN "%%a" "g_x_%%a"
)
GOTO :EOF
dir
發現之初(/b
)匹配*_*.7k
,這是通過管道輸送到一個FINDSTR
允許通過只有那些不匹配(/v
)名稱的字面(/l
)字符串"g_x_"
文件名。脫管(^
)在管道需要告訴CMD管道是由for
執行的命令的一部分,而不是dir
的參數。然後
所得的文件名被分配到%%a
,前置和更名
這種方法首先使現有的文件名列表,然後處理該列表。如果試圖就地重命名,那麼它可能是一個文件aaa_bbb.7k將被重新命名爲g_x_aaa_bbb.7k,然後再g_x_g_x_aaa_bbb.7k ...
存放在變量中的每個文件的文件名,並用 'g_x_' +變量名前綴它。
如果您的所有文件開始000_ *然後使用命令行在以下方面:
FOR %? IN (000_*.7k) DO ren %? g_x_%?
,使用:
FOR %%? IN (000_*.7k) DO ren %? g_x_%%?
這是@PeterWright解決方案的修改版但它允許您在DIR
交換機中添加/s
來處理子目錄,如果您需要的話。
就目前而言,它只會將重命名命令回顯到屏幕 - 所以刪除echo
以啓用重命名,如果您喜歡屏幕上顯示的內容。
@ECHO OFF
FOR /f "delims=" %%a IN (' dir /b /a-d *_*.7k ') DO (
echo REN "%%a" "g_x_%%~nxa"
)
pause
你能解釋一下嗎? –
已更新的答案。比我想象的更簡單。讓我知道你是否需要任何進一步的幫助。 –
這將處理一些文件兩次。 – foxidrive