我在“APP_ENTITY_part___20120910.txt”格式的目录中有文件名
我想去掉 3 个下划线后的所有内容并保留文件名的第一部分。
有没有一个好的网站可以指导我如何做到这一点?
或者,也许你们中的一个批处理专家可以指导我如何做到这一点?
我在“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
上述解决方案在 的第一次出现时截断___
。
名称 likePart1___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
)
为您提供简单的单线解决方案:
set DirNam=%DirNam:~,-12%
如果您总是只删除 4 个下划线加上____YYYYMMDD
名称末尾的日期,这将适用于您。
也许通过这样做来整理其他目录名称:
setlocal enabledelayedexpansion
for /d %%x in (*____????????) do (
set DirNam=%%x
set DirNam=!DirNam:~,-12!
echo %%x is now !DirNam!
)