在文件名中的分隔符后删除所有字符

Zac*_*ber 2 dos batch-file

我在目录中的文件名格式为"APP_ENTITY_part ___ 20120910.txt"

我想在3个下划线后删除所有内容并保留文件名的第一部分.

是否有一个好的网站可以指导我如何实现这一目标?

或者,也许你们其中一个dos批处理专家可以引导我如何做到这一点?

dbe*_*ham 6

有一个非常简单的解决方案,它使用变量扩展搜索和替换来注入REM命令.

@echo off
setlocal
for %%F in (*) do call set "var=%%F" & call :procName
exit /b

:procName
::truncate at the 1st occurance of ___
set "var=%var:___="&rem %
::print the result
set var
exit /b
Run Code Online (Sandbox Code Playgroud)

关键路线是 set "var=%var:___="&rem %

假设var = Part1 ___ Part2

替换后,该行变为: set "var=Part1"&rem Part2

上述解决方案在第一次出现时截断___.

这样的名字Part1___Part2___Part3会导致Part1.

如果你想在最后一次出现时截断___并得到一个结果Part1__Part2,那么解决方案就更复杂了.

我使用搜索和替换更改___为文件夹分隔符,然后使用~p修饰符删除最后一部分的第二个FOR,然后搜索并替换以恢复前导___分隔符.

@echo off
setlocal disableDelayedExpansion
for %%F in (*) do (
  set "var=%%F"
  setlocal enableDelayedExpansion
  set "var2=!var:___=\!"
  if "!var2!" neq "!var!" for %%A in ("\!var2!") do (
    endlocal
    set "var=%%~pA"
    setlocal enableDelayedExpansion
    set "var=!var:~1,-1!"
    set "var=!var:\=___!"
  )
  echo var=!var!
  endlocal
)
Run Code Online (Sandbox Code Playgroud)