你好:)当朋友给你一个mp3文件时,大多数情况下,标题是这样命名的:" avenged_sevenfold _-_ buried_alive.mp3"。我想创建一个脚本,允许我通过替换" _"来重命名当前库的每个文件和文件夹。 by" "(空间)。这是非常长的手动重命名每个文件;我的脚本在这里:
@echo off
title Merci qui ?
:debut
echo do you want to rename every files/foldes by replacing "_" by " "? (y/n)
set /p choix=
if %choix%==y (
goto renomage)
if %choix%==n (
goto end)
goto debut
:renomage
set /a x=1 :pointeur de fichier
set /a compteurA=0
set /a compteurB=0
for /f %%a in ('dir /b /a:-d *.*') do set /a compteurA+=1
for /f %%a in ('dir /b /a:d *.*') do set /a compteurB+=1
echo %compteurA% fichiers %compteurB% dossiers
set /a n=compteurA+compteurB
echo number of folder/files batch included %n%
:while1
if %x% GTR %n% goto prochain1
set Strin=???name?ofthe?dossier?number?x?????????????
for /f "tokens=1,* delims=[,]" %%A in ('"%comspec% /u /c echo:%Strin%|more|find /n /v """') do `set /a l=%%A-4`
echo Le nom contient %l% lettres.
:leftspace
set Strin=%Strin:_= %
set str=%Strin:~0,1%
if %str% EQU " "(
set Strin=%Strin:~1,%l%-1%
goto leftspace)
SET /A x +=1
goto while1
:prochain1
echo Success ! (or not)
pause
:end
我只需要帮助这条线:
set Strin=???name?ofthe?dossier?number?x?????????????
否则剩下的应该没问题。如果你有批评或某事,请继续=)
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR %%f IN (ad a-d ) DO FOR /f "delims=" %%a IN (
'dir /b /s /%%f "%sourcedir%\*" '
) DO CALL :chgnam %%a
GOTO :EOF
:chgnam
SET "name=%*"
SET "newname=%name:_= %"
IF "%newname%" neq "%name%" ECHO REN "%name%" "%newname%"
GOTO :eof
为了测试目的,所需的REN命令仅为ECHO
。 在您确认命令正确之后,将ECHO(REN
更改为REN
以实际重命名文件和目录。目录首先被重命名。
您需要更改sourcedir
以指向所需目录。树中包含_
的所有文件和目录都将被重命名 - 如果可以重命名它们。
[修订和更正版本]
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
PUSHD "%sourcedir%"
FOR %%f IN (ad a-d ) DO FOR /f "delims=" %%a IN (
'dir /b /s /%%f "%sourcedir%\*" '
) DO CALL :chgnam "%%a" "%%~nxa"
POPD
GOTO :EOF
:chgnam
SET "name=%~2"
SET "newname=%name:_-_=-%"
SET "newname=%newname:_= %"
IF "%newname%" neq "%name%" ECHO(REN "%~1" "%newname%"
GOTO :eof
原始版本会显示不正确的ren
语法(新名称可能不包含路径)
如果要在当前目录上运行,只需将sourcedir
的值设置为单个点。
答案 1 :(得分:0)
此解决方案由Chris Hoffman从How to Batch Rename Files in Windows: 4 Ways to Rename Multiple Files重新发布
PowerShell为在命令行环境中重命名文件提供了更大的灵活性。使用PowerShell,您可以将一个命令的输出(在PowerShell术语中称为“命令行开关”)传递给另一个命令,就像在Linux和其他类UNIX系统上一样。
首先,打开Powershell ISE,然后导航到包含您要使用此命令重命名的文件和文件夹的目录(文件夹):
cd "C:\your\directory\"
您需要的两个重要命令是Dir,它列出当前目录中的文件,以及Rename-Item,它重命名一个项目(在本例中为文件)。将Dir的输出传递给Rename-Item,您就可以了。
启动PowerShell ISE后,使用cd命令输入包含文件的目录。您应该将文件放在它们自己的目录中,这样就不会意外地重命名其他文件。
例如,假设我们不希望文件名中包含下划线字符 - 我们宁愿使用空格。
以下命令列出当前目录中的文件,并将列表管道为Rename-Item。 Rename-Item用空格替换每个下划线字符。
Dir | Rename-Item –NewName { $_.name –replace "_"," " }
替换" _
"和" "用于替换文件名中其他字符的命令部分。
如果您需要帮助执行其他更高级的操作,请咨询Microsoft’s documentation on the Rename-Item commandlet。