web-dev-qa-db-ja.com

ファイル名からスペースを削除する方法(一括)

Windowsで数千のファイルから一括してスペースを削除する方法(アンダースコアに置き換えない)? DOSコマンドからこれを実行できますか?

現在:

file one.mp3
file two.mp3

すべてのファイルが以下になる必要があります。

fileone.mp3
filetwo.mp3
21
Nick Kahn

ファイルの名前をすべて削除し、名前からすべてのスペースを削除できるスクリプトを次に示します。

:renameNoSpace  [/R]  [FolderPath]
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
  set "forOption=%~1 %2"
  set "inPath="
) else (
  set "forOption="
  if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
  if /i "%~f0" neq "%%~fF" (
    set "folder=%%~dpF"
    set "file=%%~nxF"
    setlocal enableDelayedExpansion
    echo ren "!folder!!file!" "!file: =!"
    ren "!folder!!file!" "!file: =!"
    endlocal
  )
)

スクリプトがrenameNoSpace.batと呼ばれると仮定します

renameNoSpace:(引数なし)現在のディレクトリ内のファイルの名前を変更します

renameNoSpace /R:現在のディレクトリをルートとするフォルダーツリー内のファイルの名前を変更します

renameNoSpace myFolder:現在のディレクトリにある「myFolder」ディレクトリ内のファイルの名前を変更します。

renameNoSpace "c:\my folder\":指定されたパスのファイルの名前を変更します。パスにスペースが含まれているため、引用符が使用されます。

renameNoSpace /R c:\:C:ドライブ上のすべてのファイルの名前を変更します。

78
dbenham

PowerShellファイルを作成する-*.ps1拡張子

このコードを書く:

dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" }

保存してから、右クリック-> powershellで実行

8
bogudoby
@echo off
setlocal enableextensions enabledelayedexpansion

for %%f in (*.*) do (
set ARG=%%~nxf
rename "%%f" !ARG: =!
)
4
pathe3

1つのファイル/ディレクトリに対してこれを行う簡単なスクリプトを書くことができます、例えば:

@echo off
setlocal enableextensions enabledelayedexpansion

set "ARG=%~1"
ren "%ARG%" "%ARG: =%"

...そして、必要に応じて、関心のあるすべてのファイルやディレクトリに対して実行します。たとえば、上記のスクリプトをmyrenamingscript.cmdとして作成した場合、次のコマンドを実行することにより、現在のディレクトリ内のすべての非ディレクトリファイルに対して実行できます。

for %f in (*) do @myrenamingscript.cmd "%~f"
3
reuben

Windowsの場合:

  1. コマンドプロンプトを開きます。
  2. Cdコマンドでフォルダーに移動します(例:cd "paht of your folder")。
  3. 次のように入力してPowerShellを開きます:powershell
  4. 次に、これを入力します:get-childitem * .mp3 | foreach {rename-item $ _ $ _。name.replace( ""、 "")}
1
Javiers

私が直面した問題は、新しいファイルに指定しようとする名前のファイルが既に存在する可能性があることです(たとえば、「file one.txt」および「file_one.txt」という名前のフォルダーに2つのファイルがある場合"スペースをアンダースコアに置き換えようとすると、1つのファイルが他のファイルに置き換わります)。そこで、このスクリプトを作成して、新しい名前が既に存在するかどうかを確認し、存在する場合はファイル名の末尾に番号を付けます(その名前のファイルがなくなるまで番号に1を追加します)。何を変更するかについての指示は一番上にあります(推奨行)。 *。*オプションを使用する場合、ファイルの名前を変更するフォルダーと同じフォルダーにバッチファイルを保存しないでください。これがお役に立てば幸いです。

@echo off

REM Instructions
REM This script repaces spaces from file names with underscores. 
REM If you want to just remove the spaces uncomment lines 30 and 52 and comment out the lines 29 and 51. 
REM set the following parameters. 
REM pb is the folder containing the files we want to rename (fullpath)
REM tm is a temporary folder that will be created and deleted. Just put a folder that does not exist and is not used by anything else (fullpath).
REM all is the file type you want to raname. E.g. *.* for every file, *.txt for TXTs, *.pdf for PDFs etc 
REM you don't have to change anything else

set pb=<folder containing the files to rename>
set tm=<a temp folder that does not exist>
set all=*.*

set pa=%pb%%all%

setlocal EnableDelayedExpansion

cd /d %pa%

set /a count=1

if not exist %tm% mkdir %tm%

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name3=!name2!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

:rename

for /f %%F in (%pa%) do (

    set name=%%~nF
    set name2=!name: =_!
    REM set name2=!name: =!
    set name4=!name2!%count%
    set name3=!name4!%%~xF

    if !name2! == %%~nF ( 
        move /y %%~dpF\!name3! %tm%\ >nul
    ) else (
            if not exist %%~dpF\!name3! ( 
                if not exist %tm%\!name3! (
                    ren "%%F" "!name3!" 
                    move /y %%~dpF\!name3! %tm%\ >nul
                )
        )   
    ) 

)

set /a count = %count% + 1

set /a loop = 0

for %%F in (%pa%) do (set /a loop = 1)

if %loop% equ 1 goto rename

move /y %tm%\%all% %pb% >nul

rmdir /s /q %tm%
0
Mike_Gre