如何使用Windows命令行删除下划线后的字符串的最后一部分

时间:2015-10-08 14:26:57

标签: cmd

我有一个文件" RAAAAAAV.KKK9.Z01_YYYYMMDDhhmmss"。我想删除下划线之后的最后一部分" _"使用one liner dos命令。请帮忙。

需要输出: RAAAAAAV.KKK9.Z01

3 个答案:

答案 0 :(得分:1)

要重命名特定文件:

ren "RAAAAAAV.KKK9.Z01_20151009231015" *.Z01

重命名扩展名为Z01_timestamp:

的所有文件
ren *.Z01_?????????????? *.Z01

要重命名扩展名开头未知的所有文件:

for %F in (*.???_??????????????) do @for /f "delims=_" %X in ("%~xF") do @ren "%F" "%~nF%X"

如果在批处理脚本中使用,则百分比必须加倍:

@echo off
for %%F in (*.???_??????????????) do for /f "delims=_" %%X in ("%%~xF") do ren "%%F" "%%~nF%%X"


编辑 - 2015-10-10

如果你真的想要精确控制哪些文件被重命名,那么你可以使用我的JREN.BAT regular expression renaming utility - 一个混合的JScript /批处理脚本,它可以在XP以后的任何Windows机器上本地运行。以下简单的一行内容剥离了任何文件的下划线和时间戳,该文件的扩展名由字母和数字的任意组合组成,后跟一个下划线,后跟一个14位数的时间戳。

jren "(\.[A-Z0-9]+)_\d{14}$" $1 /i

答案 1 :(得分:0)

以下作品

map = ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();

答案 2 :(得分:0)

也许已经晚了,但无论如何我都会分享我的创立,以造福他人。

您可以使用批处理子过程/功能

:leftStr STRING SEPARATOR RESULT_VAR
::get left string before some specific SEPARATOR
set "STRING=%~1"                get arg1
set "RIGHT=%STRING:*%~2=%"      anything after arg2
set "%~3=!STRING:%~2%RIGHT%=!"  strip that substr
exit /b

然后您可以从其他地方调用它,甚至在启用了delayExpansion的for循环内也可以使用。

..
call :leftStr "left_right" "_" varname
echo !varname!
@rem varname = left

注意:这不是花哨的功能,没有错误检查等。您最好确保输入的字符串,分隔符,return_var已经有效或与其他任何字符串没有冲突。

编辑:忘记了,这是针对任意长度的字符串和分隔符,对于简单的固定长度,您可以只使用%var:〜-N1,N2%(负N1)