【问题标题】:Batch script remove everything after a dynamic text from the string/filename批处理脚本从字符串/文件名中删除动态文本后的所有内容
【发布时间】:2018-01-21 17:30:16
【问题描述】:

我有一个包含文件名的字符串,如下面的批处理脚本行:

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

其他变量也是如此。

如何设置这样的函数,从 filename string 中去除 dynamic substring

我尝试了下面的代码,但这不适用于动态子字符串或文本,可以用变量替换:

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

【问题讨论】:

    标签: windows batch-file rename windows-7-x64 batch-rename


    【解决方案1】:

    无需指定扩展名 - 它仍在名称中。

    使用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 命令前面带有回显,如果输出看起来正常,则删除回显。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      相关资源
      最近更新 更多