我在目录中的文件名格式为"APP_ENTITY_part ___ 20120910.txt"
我想在3个下划线后删除所有内容并保留文件名的第一部分.
是否有一个好的网站可以指导我如何实现这一目标?
或者,也许你们其中一个dos批处理专家可以引导我如何做到这一点?
有一个非常简单的解决方案,它使用变量扩展搜索和替换来注入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)