【发布时间】:2021-05-03 17:16:07
【问题描述】:
我有很多我想以不同方式组织的文件。批处理脚本应使用文件名中日期左侧的子字符串创建文件夹。
文件现在这样命名:
This_is_my_file_21.01.29_22-00_abc_115.avi
This_is_my_file_20.09.29_21-10_abc_15.avi
This_is_another_file_21.01.29_22-00_abc_55.avi
模式:
_
文件夹应该这样命名:
This_is_my_file This_is_another_file
问题是,如何为我的文件夹名称获取正确的子字符串?
这是我目前所拥有的:
@echo off
setlocal
set "basename=."
for /F "tokens=1* delims=." %%a in ('dir *.avi /B /A-D ^| sort /R') do (
set "filename=%%a"
setlocal EnableDelayedExpansion
for /F "delims=" %%c in ("!basename!") do if "!filename:%%c=!" equ "!filename!" (
set "basename=!filename!"
md "!basename:~0,-23!"
)
move "!filename!.%%b" "!basename:~0,-23!"
for /F "delims=" %%c in ("!basename!") do (
endlocal
set "basename=%%c
)
)
【问题讨论】:
-
所以所有文件名的格式都是
*??.??.??-*.aviyes? -
看起来你很亲密。
%%a的值为This_is_my_file_21,%%b的值为01.29_22-00_abc_115.avi。您将文件名的第一部分分配给了一个变量,现在您所要做的就是使用 -3 作为子字符串,因为您想删除这两个数字和下划线。set "filename=!filename:~0,-3!"。现在变量filename的值是This_is_my_file。 -
@jwdonahue 是的,所有文件的名称中都有 _??.??.??_.avi
-
@ Squashman 我以前试过这个,但最后我得到的值是 !filename:~0,-3!在我的变量中。好像我快到了,但出了点问题。
标签: windows batch-file directory batch-rename