批处理脚本从 string/filename 中删除动态文本后的所有内容
Batch script remove everything after a dynamic text from the string/filename
我有一个包含文件名的字符串,如下面的批处理脚本行:
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"
应该给我输出,删除变量 %file2%
中 .vbs
之后的所有内容:
name.vbs
其他变量以此类推。
如何设置这样的函数,从 filename string 中剥离 dynamic substring?
我尝试了下面的代码,但它不适用于动态子字符串或文本,它们可以从变量中替换:
set targetfile=%file2:.vbs=&rem.%
无需指定扩展名 - 它仍在名称中。
使用 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
ren 命令前面有一个 echo,如果输出看起来不错,请删除 echo。
我有一个包含文件名的字符串,如下面的批处理脚本行:
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"
应该给我输出,删除变量 %file2%
中 .vbs
之后的所有内容:
name.vbs
其他变量以此类推。
如何设置这样的函数,从 filename string 中剥离 dynamic substring?
我尝试了下面的代码,但它不适用于动态子字符串或文本,它们可以从变量中替换:
set targetfile=%file2:.vbs=&rem.%
无需指定扩展名 - 它仍在名称中。
使用 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
ren 命令前面有一个 echo,如果输出看起来不错,请删除 echo。