我在目录中具有“ APP_ENTITY_part ___ 20120910.txt”格式的文件名

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

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

或者,也许你们中的一批批处理专家可以引导我执行此操作?

最佳答案

有一个非常简单的解决方案,它使用变量扩展搜索和替换来注入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


关键线是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
)

关于batch-file - 删除文件名中定界符后的所有字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12359062/

10-09 07:14