我正在尝试遍历“source”下的每个文件夹,并删除我添加的版本扩展名。
例如,
\pathTo\source\FirstComponent.1.5\...
\pathTo\source\SecondComponent.4.6\...
更改为,
\pathTo\source\FirstComponent\...
这是我到目前为止所拥有的......
SETLOCAL
set "SourceDir=C:\pathTo\source"
FOR /d %%i IN ("%SourceDir%") DO FOR /f "delims=." %%j IN ("%%i") DO REN "%%~i" "%%~j%%~xi"
答案 0 :(得分:2)
foxidrive已经找到了正确的帮助来找到解决方案。
@echo off
set "SourceDir=C:\pathTo\source"
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "delims=." %%j IN ("%%i") DO REN "%%~i" "%%~nj"
set SourceDir=
删除文件夹的路径并获取没有路径的文件夹的新名称时,需要 %%~nj
而不是%%j
。
也可能按照Andriy M:
的建议进行操作@echo off
set "SourceDir=C:\pathTo\source"
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "delims=." %%j IN ("%%~ni") DO REN "%%~i" "%%j"
set SourceDir=
如果其中一个父文件夹在名称中也包含一个点,那就更好了。
但如果所有文件夹在必须保留的版本字符串之前在名称Component.One
中有一个点,则可以使用以下批处理代码:
@echo off
set "SourceDir=C:\pathTo\source"
FOR /d %%i IN ("%SourceDir%\*") DO FOR /f "tokens=1,2* delims=." %%j IN ("%%~ni") DO REN "%%~i" "%%j.%%k"
set SourceDir=
还有一个解决方案可以删除文件夹名称中的最后4个字符,如果最后一个字符是第三个字符:
@echo off
setlocal EnableDelayedExpansion
set "SourceDir=C:\pathTo\source"
FOR /d %%i IN ("%SourceDir%\*") DO (
set "FolderName=%%~nxi"
if "!FolderName:~-4,1!"=="." REN "%%~i" "!FolderName:~0,-4!"
)
endlocal
答案 1 :(得分:1)
如果您需要修复的文件夹名称始终采用此格式
name.number.number
您需要删除.number.number
部分,您也可以使用此方法:
SETLOCAL
SET "SourceDir=C:\pathTo\source"
FOR /D %%I IN ("%SourceDir%") DO (
FOR %%J IN ("%%~nI") DO RENAME "%%~I" "%%~nJ"
)
基本上,我们的想法是将版本号视为名称扩展名。内部循环使用%%~nI
表达式仅获取没有扩展名的文件夹名称,即没有最后.number
,并将结果分配给%%J
。以类似的方式,RENAME命令使用%%~nJ
来删除剩余的.number
(原始名称中的第一个)。因此,使用FirstComponent.1.5
名称作为示例,RENAME命令基本上就像这样:
RENAME "...\FirstComponent.1.5" "FirstComponent"
由于该方法基本上只删除了最后两个扩展名,因此您可以使用大版本号:10.123
,2014.12
...该方法的唯一限制是版本号必须始终包含正好两部分。 (如果不允许你的名字有.
,它还可以支持单部分版本号。)