2017-08-13 199 views
0

動態文本後,我有一個包含文件名類似下面批處理腳本行的字符串:批處理腳本刪除一切從字符串/文件名

set "file1=name.php_2017_23_08_12_22_07" 
set "file2=name.vbs_2016_16_12_12_13_03" 
.... 

現在,當你看到上面的文件名列表及其擴展爲多種我需要分別使用它們的實際擴展名(.php,.vbs)來獲取真實文件名。所以,當我通過在與擴展文件名的功能,我應該得到的實際文件名,象下面這樣:

call :restoreFile %file2% ".vbs"

應該給我輸出,消除一切.vbs後的變量%file2%

name.vbs 

而且其他變量也一樣。

如何設置一個這樣的功能,從中刪除動態子串文件名字符串

我嘗試下面的代碼,但是,這並不與動態子或文本,這可以從變量取代的工作:

set targetfile=%file2:.vbs=&rem.% 

回答

0

無需指定擴展 - 它仍然在名稱中。使用for /f分割第一個下劃線。

:restoreFile 
Set "FileName=" 
For /f "tokens=1* delims=_" %%N in ("%~1") Do Set "FileName=%%N" 
If defined FileName Echo Ren %1 %FileName% 
Goto :Eof 

你甚至可以把DATE_TIME在延長前,從而避免可能的受騙者:

:restoreFile 
Set "FileName=" 
For /f "tokens=1* delims=_" %%N in ("%~1") Do Set "FileName=%%~nN_%%M%%~xN" 
If defined FileName Echo Ren %1 %FileName% 
Goto :Eof 

仁命令的帶有回聲前綴,如果輸出看起來OK去除回聲。

相關問題