2011-08-08 70 views
1

我試圖編寫一個命令腳本(.cmd文件),它將查找最新文件並重命名其擴展名。重命名最新文件的擴展名

所以,如果有:

file1.txt 
file2.txt 
file3.txt 

而且file3.txt是最新的,腳本應該擴展更改爲.xml,所以最終的結果將是file3.xml

如果我做以下,將重命名文件的擴展名:

move file3.txt file3.xml 

但我不知道如何找到最新的文件,然後更改其擴展名。

+1

請定義*最新*。最新修改時間戳?文件名中最大的數字? –

回答

0

你可以使用下面的批處理代碼:

@echo off 
for /F "eol=| delims=" %%F in ('dir /B /O-D /TW "C:\Temp\Test\*.txt" 2^>nul') do (
    ren "C:\Temp\Test\%%F" "%%~nF.xml" 
    goto :EOF 
) 

命令DIR返回而不路徑並且沒有由於/B(裸格式)的任何其他數據的匹配圖案*.txt文件名的列表進行排序,根據扭轉由於/O-D /TW,最後修改日期(最新的第一個)。

該列表按行命令FOR執行,該命令爲第一個文件名執行rename命令,以更改指定目錄中最新的*.txt文件的文件擴展名。重命名第一個文件後,由於goto :EOF,循環和批處理文件處理已退出。 EOF是一個預定義的標籤,意思是文件結束。

如果上運行的批處理文件,當前目錄是始終與文本文件的目錄,該批處理文件可以同時編碼爲:

@echo off 
for /F "eol=| delims=" %%F in ('dir /B /O-D /TW *.txt 2^>nul') do (
    ren "%%F" "%%~nF.xml" 
    goto :EOF 
) 

delims=關閉分裂的命令DIR返回的文件名如果最新的文件在文件名中包含一個或多個空格,則使用空格向空格寫入

2^>nul重定向,因爲沒有*.txt文件在當前分別指定目錄設備nul抑制該錯誤消息,由此redirection operator>^這裏逃出,因爲使用它命令內FOR中的任何錯誤信息。

%%~nF表示僅文件名,沒有文件擴展名,點分隔文件擴展名與文件名。

爲了更好的瞭解所使用的命令,以及它們如何在這裏工作,打開命令提示符窗口中,執行有下面的命令,並閱讀完全針對每個命令非常仔細地顯示所有幫助頁面。

  • dir /?
  • echo /?
  • for /?
  • goto /?
  • ren /?
相關問題