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

How to remove a prefix from multiple files?

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

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

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

但结果是 .com] filename.mp4 并且无法重命名超出点的任何内容,有什么想法吗?

通过模式替换使用参数扩展。

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

使用 for 循环拆分名称中的 space。

@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
@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 命令仅 ECHOed 用于测试目的。 确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

执行源目录的目录扫描,在 /b 基本模式 /a-d 中没有目录,并对找到的每个文件名进行标记 - 第一个 ] 到 [=18= 之前的部分] 余数为 %%b.

如果 %%b 不为空(即不包含 ])则什么都不做,然后使用默认标记集(包括 space)和 tokens=0 将前导 space 从 %%b 剥离为 %%h,然后构建原始文件名并重命名。

为了完整起见,一个 cmd.exe 替代方案:

For %A In ("*] *.*") Do @(Set "_=%A"&Call Ren "%A" "%_:*] =%")