批量删除部分文件名
Removing part of filename with batch
我已尝试调整为类似问题提供的大量代码,但我认为没有发布解决方案。我的问题是我要删除其余部分的部分在最后一次之前存在 2 次!
我有一个文件夹:
number1-number2-number3 - some random text about the file.filetype
number1 的范围从 01 到 99
number2 的范围为 1-99999
number3 的范围为 1-999,可能有 2 位小数,与整数之间用 . 分隔。
示例文件夹 c:\temp\
:
15-1592-1 - file 1.doc
15-1592-2 - this is file2.pdf
15-1592-3 - this cointains subfiles.html
15-1592-3.1 - sub1.jpg
15-1592-3.2 - sub2.pdf
我需要的是一个文件夹,其中 number3 结尾后的所有内容都从文件名中删除,但文件类型也保持不变。
示例:
15-1592-1.doc
15-1592-2.pdf
15-1592-3.html
15-1592-3.1.jpg
我了解到综合阅读所有答案后,这是可能的。
我缺的是编译这一切的知识!
提取小数部分(如果存在)有点棘手,但这应该可以完成(可能需要一些标记调整以满足您的需要)
@echo off
setlocal enabledelayedexpansion
set "source_path=c:\temp\*"
for /f "tokens=1,* delims=." %%a in ('dir /b %source_path%') do (
set "ext=" & set "decimal="
for /f "tokens=1,* delims=." %%i in ("%%b") do (
if "%%j" neq "" (
set "ext=%%j"
for /f "tokens=1,* delims=- " %%d in ("%%i") do set "decimal=.%%d"
) else (
set "ext=%%i"
)
)
for /f "tokens=1-3,* delims=- " %%i in ("%%a") do (
rem replace echo with operation you need
echo %%i-%%j-%%k!decimal!.!ext!
)
)
endlocal
您想删除第一个 space 之后的所有内容(不带扩展名)
这很容易,如果你使用修饰符(参见 for /?
):
@echo off
setlocal enabledelayedexpansion
for %%a in (??-*-*) do (
for /f "tokens=1 delims= " %%b in ("%%~na") do (
ECHO ren "%%a" "%%b%%~xa"
)
)
我已尝试调整为类似问题提供的大量代码,但我认为没有发布解决方案。我的问题是我要删除其余部分的部分在最后一次之前存在 2 次!
我有一个文件夹:
number1-number2-number3 - some random text about the file.filetype
number1 的范围从 01 到 99
number2 的范围为 1-99999
number3 的范围为 1-999,可能有 2 位小数,与整数之间用 . 分隔。
示例文件夹 c:\temp\
:
15-1592-1 - file 1.doc
15-1592-2 - this is file2.pdf
15-1592-3 - this cointains subfiles.html
15-1592-3.1 - sub1.jpg
15-1592-3.2 - sub2.pdf
我需要的是一个文件夹,其中 number3 结尾后的所有内容都从文件名中删除,但文件类型也保持不变。
示例:
15-1592-1.doc
15-1592-2.pdf
15-1592-3.html
15-1592-3.1.jpg
我了解到综合阅读所有答案后,这是可能的。
我缺的是编译这一切的知识!
提取小数部分(如果存在)有点棘手,但这应该可以完成(可能需要一些标记调整以满足您的需要)
@echo off
setlocal enabledelayedexpansion
set "source_path=c:\temp\*"
for /f "tokens=1,* delims=." %%a in ('dir /b %source_path%') do (
set "ext=" & set "decimal="
for /f "tokens=1,* delims=." %%i in ("%%b") do (
if "%%j" neq "" (
set "ext=%%j"
for /f "tokens=1,* delims=- " %%d in ("%%i") do set "decimal=.%%d"
) else (
set "ext=%%i"
)
)
for /f "tokens=1-3,* delims=- " %%i in ("%%a") do (
rem replace echo with operation you need
echo %%i-%%j-%%k!decimal!.!ext!
)
)
endlocal
您想删除第一个 space 之后的所有内容(不带扩展名)
这很容易,如果你使用修饰符(参见 for /?
):
@echo off
setlocal enabledelayedexpansion
for %%a in (??-*-*) do (
for /f "tokens=1 delims= " %%b in ("%%~na") do (
ECHO ren "%%a" "%%b%%~xa"
)
)