如何从多个文件中删除前缀?

时间:2017-04-28 10:56:51

标签: batch-file cmd windows-vista file-rename batch-rename

我下载了很多名为[site.com] filename.mp4的视频,我想删除前缀,以便命名为filename.mp4

我尝试了一个包含以下代码的批处理文件:

ren "[site.com] *.mp4" "///////////*.mp4"

但结果是.com] filename.mp4并且无法重命名任何超出点的任何想法?

4 个答案:

答案 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