Batch file 删除文件名中分隔符后的所有字符

Batch file 删除文件名中分隔符后的所有字符,batch-file,dos,Batch File,Dos,我在目录中有文件名,格式为“APP_ENTITY_part_uuuuu20120910.txt” 我想去掉3个下划线后的所有内容,并保留文件名的第一部分 有没有一个好的网站可以指导我如何做到这一点 或者,也许你们中的一位dos批处理专家可以指导我如何做到这一点?您可以安装或(包括适当的库,如“重命名”程序)并使用(粘贴在下面)的前两个答案之一。在实现以下任一项之前,您可能需要测试正则表达式和glob: rename's/\\\\\\.txt/\.txt/'*\\\u part\\\\*.txt

我在目录中有文件名,格式为“APP_ENTITY_part_uuuuu20120910.txt”

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

有没有一个好的网站可以指导我如何做到这一点

或者,也许你们中的一位dos批处理专家可以指导我如何做到这一点?

您可以安装或(包括适当的库,如“重命名”程序)并使用(粘贴在下面)的前两个答案之一。在实现以下任一项之前,您可能需要测试正则表达式和glob:

rename's/\\\\\\.txt/\.txt/'*\\\u part\\\\*.txt


用于f in*.\u part.\u*..txt;do mv$f$(echo$f|sed's/\\\\.txt/\.txt/g');完成

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

替换后,行变为:
set“var=Part1”和rem Part2

上述解决方案在第一次出现
\uuuuu
时截断

类似于
Part1\uuuuuuuuu Part2\uuuuuuu Part3
的名称将导致
Part1

如果要在最后一次出现
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
时截断,并得到类似
第1部分\uuuuuuuuuuuuuuuu

我使用搜索和替换将
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


为您提供一个简单的单线解决方案:

set DirNam=%DirNam:~,-12%
如果您总是在名称末尾去掉4个下划线加上日期
\uuuuuuuuuuuyyyymmdd
,这将非常有用

可以通过执行以下操作来整理其他目录名:

setlocal enabledelayedexpansion
for /d %%x in (*____????????) do ( 
  set DirNam=%%x
  set DirNam=!DirNam:~,-12!
  echo %%x is now !DirNam!
)

我很想使用Cygwin或者更好的,但是在Linux上有一个shell脚本,但是我只限于dos批处理…公平的说,有时我们会受到其他人和系统的限制,祝你好运!在第一个示例中,您如何将其设置为第二个变量,而不是删除/截断“__”后面的其余变量?我假设它在'set'var=%var:\\\=“&…”中,但我无法计算出正确的语法。
setlocal enabledelayedexpansion
for /d %%x in (*____????????) do ( 
  set DirNam=%%x
  set DirNam=!DirNam:~,-12!
  echo %%x is now !DirNam!
)