2014-06-08 19 views
0

你好:)當一個朋友給你一個mp3文件,最常見的標題是這樣命名的:「avenged_sevenfold _-_ buried_alive.mp3」。我想創建一個腳本,允許我通過「」(空格)替換「_」來重命名當前庫中的每個文件和文件夾。這是非常長的手動重命名每個文件;我的腳本是在這裏:通過替換子串批量重命名

@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

如果您只是對重新命名mp3文件感興趣(而不是專門爲此編寫程序),則有很多用於管理音樂收藏的程序。看看[Picard](https://musicbrainz.org/doc/MusicBrainz_Picard) –

+0

沒有^^我對一個程序批量感興趣;重命名音樂只是一個編程的藉口:p – Disconected

+0

可能重複的[批處理文件腳本從文件名(Windows)中刪除特殊字符](http://stackoverflow.com/questions/261515/batch-file-script-to-刪除特殊字符從文件名窗口) – bummi

回答

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 

所需的任命令僅僅是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的值設置爲單個點即可。

+0

Ty爲您的答案Magoo :),我只是想避免需要指出sourcedir的方式,我的意思是,我不需要指出它,因爲我只是想我的腳本適用於這個當前的文件夾。 (我的.bat被放置在那裏) – Disconected

+0

我剛剛嘗試了一個目錄,事情就是'%name%'將庫存「C:\ Users \ Dude \ Desktop \ new文件夾」,但是使用那個'SET'newname =%name :_ =%「'它會重命名所有目錄,如果我們有'c:\ new_folder \ martin_garix.mp3',它將被'c:\ new文件夾\ martin garix.mp3'(new_folder =>新文件夾)它的一個問題^^ – Disconected

+0

使用'set「sourcedir =。」'在當前目錄執行批處理。這樣,批處理可以位於** PATH **上的任何目錄中 - 它不必在當前目錄中;只需將'cd'到您想要處理的目錄並輸入批處理名稱以處理* this *目錄。 – Magoo

0

該解決方案從How to Batch Rename Files in Windows: 4 Ways to Rename Multiple Files由克里斯·霍夫曼轉貼

的PowerShell提供了一個命令行環境中重命名文件更大的靈活性。使用PowerShell,您可以將命令的輸出 - 以PowerShell術語稱爲「commandlet」 - 輸送到另一個命令,就像在Linux和其他類UNIX系統上一樣。

Open PowerShell ISE

首先,打開PowerShell ISE中,然後導航到該目錄(文件夾),有你想使用此命令重命名文件和文件夾:

cd "C:\your\directory\" 

Navigate to your folder

您需要的兩個重要命令是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