首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理脚本删除文件名或目录中的最后一个字

批处理脚本删除文件名或目录中的最后一个字
EN

Stack Overflow用户
提问于 2013-03-26 10:34:34
回答 2查看 1.6K关注 0票数 0

有人能帮我写个批处理脚本吗。我需要一个脚本,谁可以删除文件名或目录中的最后一个单词和空格。

例如,

新建文件夹在执行脚本新建后-删除最后的空格和word。

EN

回答 2

Stack Overflow用户

发布于 2013-03-26 10:58:57

这应该适用于ren *" "* *" "。但是要小心,因为这会改变目录中的所有内容。如果您知道文件或文件夹的第一个单词,那么您可以使用这个ren 1stword" "* *" "

票数 0
EN

Stack Overflow用户

发布于 2013-03-26 11:24:14

代码语言:javascript
运行
复制
@ECHO OFF
SETLOCAL enabledelayedexpansion
FOR %%t IN (*) DO (
  CALL :process "%%~nt"
  IF DEFINED success ECHO REN "%%t" "!success!%%~xt"
  )
GOTO :eof

:process
SET "success=%~1"
:procloop
SET "lastchar=%success:~-1%"
SET "success=%success:~0,-1%"
IF NOT DEFINED success GOTO :EOF 
IF NOT "%lastchar%"==" " GOTO procloop
:: Remove any other trailing spaces
:rtsloop
SET "lastchar=%success:~-1%"
SET "success=%success:~0,-1%"
IF "%lastchar%"==" " GOTO rtsloop
SET "success=%success%%lastchar%"
GOTO :eof

对于大多数“正常”的名字来说,这应该是有用的。对于包含极少数字符(如!^ )的名称,它可能会失败--但是这样的文件/目录名是愚蠢的。

FOR更改为FOR /d以处理目录,而不是文件。

本质上,NAME部分以引号形式传递给:process例程以保留其间距,该例程首先删除最终字符,直到找到一个空格,然后继续删除任何进一步的空格。

如果名称没有空格,success将为空,因此未定义,否则它将有新的名称。

验证后,将ECHO REN更改为简单的REN以进行重命名,此例程只报告它打算做的事情。

增编:

我们有个术语上的难题。

对于FILESFILENAME.TXT如果经常被称为文件的“名称”,但是FILENAME是“名称”,而.TXT是扩展名。

当发生此过程时,期望的结果是FILENAME WITH SPACES.EXT变为FILENAME WITH.EXT,以保留文件的扩展名或类型。

对于目录名,仍然支持“扩展”的思想,因此Folder 18.9.0.17被视为具有.17扩展的Folder 18.9.0 (扩展是在最终.之后发生的任何事情)。

解决方法非常简单--不要在重命名中添加扩展名。

代码语言:javascript
运行
复制
  IF DEFINED success ECHO REN "%%t" "!success!"

(但请注意,Folder 18.9.0.17Folder 18.9.0.18Folder 18.9.0.19ALL的目标重命名为Folder --只有第一个可能成功.)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15634870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档