有人可以帮助我使用批处理脚本。我需要一个脚本,可以删除文件名或目录中的最后一个单词和空格 例如:
执行脚本后新文件夹 新 - 删除最后一个空格和单词。
答案 0 :(得分:0)
这应该有效ren *" "* *" "
。但要小心,因为这将改变该目录中的所有内容。如果您知道文件或文件夹的第一个单词,则可以使用此ren 1stword" "* *" "
。
答案 1 :(得分:0)
@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
进行重命名,此例程只是报告它打算做什么。
附录:
我们有一点术语难题。
对于FILES
,FILENAME.TXT
如果经常被称为文件的“名称”,但FILENAME
是“名称”而.TXT
是EXTENSION。
当此过程发生时,所需的结果是FILENAME WITH SPACES.EXT
变为FILENAME WITH.EXT
以保留文件的EXTENSION或TYPE。
使用DIRECTORY名称,仍然支持“扩展”的概念,因此Folder 18.9.0.17
被视为Folder 18.9.0
,扩展名为.17
(扩展名是在最终版本之后发生的任何内容) .
)
治愈很简单 - 不要在重命名中添加扩展名。
IF DEFINED success ECHO REN "%%t" "!success!"
(但请注意,Folder 18.9.0.17
,Folder 18.9.0.18
,Folder 18.9.0.19
ALL 的目标重命名为Folder
- 只有第一个可能成功...)