2017-08-13 220 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去除回声。

相关问题