2013-10-21 131 views
0

我想使用命令提示符爲前綴'g_x_'重命名文件。原始文件名的結構是:.7k文件批量重命名

000_1565.7k

我曾嘗試:

ren *.7k g_x_*.7k 

該代碼將文件重命名爲「g_x_1565.7k」,但我真的需要的文件被命名爲'g_x_000_1565.7k'

關於爲什麼代碼丟失部分原始文件名的任何想法?

感謝,

DH

回答

0
@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 ...

0

存放在變量中的每個文件的文件名,並用 'g_x_' +變量名前綴它。

如果您的所有文件開始000_ *然後使用命令行在以下方面:

FOR %? IN (000_*.7k) DO ren %? g_x_%?

在批處理文件

,使用:

FOR %%? IN (000_*.7k) DO ren %? g_x_%%?

+0

你能解釋一下嗎? –

+0

已更新的答案。比我想象的更簡單。讓我知道你是否需要任何進一步的幫助。 –

+0

這將處理一些文件兩次。 – foxidrive

0

這是@PeterWright解決方案的修改版但它允許您在DIR交換機中添加/s來處理子目錄,如果您需要的話。

就目前而言,它只會將重命名命令回顯到屏幕 - 所以刪除echo以啓用重命名,如果您喜歡屏幕上顯示的內容。

@ECHO OFF 
FOR /f "delims=" %%a IN (' dir /b /a-d *_*.7k ') DO (
echo REN "%%a" "g_x_%%~nxa" 
) 
pause