我在目录中具有“ 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/