我下载了很多名为[site.com] filename.mp4
的视频,我想删除前缀,以便命名为filename.mp4
。
我尝试了一个包含以下代码的批处理文件:
ren "[site.com] *.mp4" "///////////*.mp4"
但结果是.com] filename.mp4
并且无法重命名任何超出点的任何想法?
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "tokens=1*delims=]" %%a IN (
'dir /b /a-d "%sourcedir%\*" '
) DO IF "%%b" neq "" (
FOR /f "tokens=*" %%h IN ("%%b") DO ECHO(REN "%sourcedir%\%%a]%%b" "%%h"
)
GOTO :EOF
您需要更改sourcedir
的设置以适合您的具体情况。
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
在/b
基本模式/a-d
中执行源目录的目录扫描,无需找到每个文件名的目录和标记 - 第一个]
到%%a
之前的部分其余为%%b
。
如果%%b
不为空(即不包含]
),则不执行任何操作,使用默认令牌集(包括空格)和tokens=0
去除前导空格从%%b
到%%h
,然后构建原始文件名并重命名。
答案 1 :(得分:1)
为了完整起见,cmd.exe替代方案:
For %A In ("*] *.*") Do @(Set "_=%A"&Call Ren "%A" "%_:*] =%")
答案 2 :(得分:0)
使用for
循环拆分名称中的空格。
@echo off
:: Pass the file name in as an argument.
:: Split the full path into a directory and filename in case the folder has a space too
set "filepath=%~dp1"
set "filename=%~nx1"
:: Jump into the hosting directory, split the file name after the first space, and jump out
pushd %filepath%
for /f "tokens=1,*" %%A in ("%filename%") do ren "%filename%" "%%B"
popd
答案 3 :(得分:-3)
使用参数扩展和模式替换。
f='[site.com] filename.mp4'
mv "$f" "${f/\[site\.com\] /}"
即使Windows系统也可以执行Bash。
http://www.mingw.org/wiki/msys
这是for循环:
for f in *.mp4; then
mv "$f" "${f/\[site\.com\] /}"
done