名前を変更する必要があるファイル名がたくさんあるWindows Server 2003サーバーがあります。基本的に、ファイル名のどこにあっても、すべての-
(ハイフン)を_
(アンダースコア)に置き換える必要があります。重複がないと仮定します。
小さなスクリプトでMacでこれを行うことができますが、ファイルが大きすぎてクレイジーなので、Macに転送して名前を変更してから、サーバーに戻ることができません。名前変更や追加のソフトウェアをダウンロードせずに、Windowsコマンドプロンプトでこれを行うことは可能ですか?
コマンドプロンプトから-すべてのファイルが同じディレクトリにあると仮定します。
for /f "tokens=* delims= " %i in ('dir /b "*.txt"') do Set LIST=%i& set LIST | ren "%~fi" "%LIST:-=_%"
これはコマンドプロンプトウィンドウごとに1つのショットであることに注意してください。つまり、何らかの理由でこれをキャンセルした場合は、別のコマンドプロンプトを開いて再度実行する必要があります。
無料のGUIアプリを使用して手を握ることを検討してください: http://www.bulkrenameutility.co.uk/Main_Intro.php
バッチファイルを使用してこれを自分で行う必要がある場合は、非常に注意してください!バッチスクリプトには「元に戻す」ボタンがありません。 C:
のような場所ですべてのファイルに再帰的に適用するbatスクリプトを実行すると、コンピューター上のすべてのファイルの名前が変更され、すぐに機能しなくなり、起動できなくなります。 OSを完全に再インストールする必要があります。 常にバックアップをとってください!
最初に、バッチファイルを単一のファイルで機能させるかどうかを決定する必要がありますか?ディレクトリ内のすべてのファイルを操作するには?または、再帰的に実行します(ディレクトリ内のすべてのファイル/フォルダ)。ここにいくつかのポインタがあります:
すべてのアンダースコア_
を現在のディレクトリ内のすべてのファイルへの文字M
に置き換えるバッチファイル
これをchange_underscores_in_this_directory.bat
という名前のバッチファイルに入れます
@echo off
setlocal enabledelayedexpansion
for %%a in (*_*) do (
set file=%%a
ren "!file!" "!file:_=M!"
)
それを実行すると、そのディレクトリ内のアンダースコア付きのすべてのファイルが「M」に変更されます。
バッチファイルを使用してスペースを何も置換しない(スペースを削除する):
https://stackoverflow.com/questions/11270453/how-to-remove-spaces-from-file-names-in-bulk
バッチファイルを使用して、スペースをアンダースコアに置き換えます。再帰的に:
それをstackoverflowで見つけました:
Set fso = CreateObject("Scripting.FileSystemObject")
Set re = New RegExp
re.Pattern = "[-]" ' put all characters that you want to strip inside the brackets'
re.IgnoreCase = True
re.Global = True
If WScript.Arguments.Unnamed.Count = 1 Then
If fso.FolderExists(WScript.Arguments.Unnamed(0)) Then
Recurse fso.GetFolder(WScript.Arguments.Unnamed(0))
Else
WScript.Echo "Folder not found."
End If
Else
WScript.Echo "Please give folder name as argument 1."
End If
Sub Recurse(f)
For Each sf In f.SubFolders
Recurse sf
WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")
sf.Name = re.Replace(sf.Name, "_")
Next
For Each sf In f.Files
WScript.Echo sf.Name, " -> ", re.Replace(sf.Name, "_")
If sf.Name <> re.Replace(sf.Name, "_" ) Then
sf.Name = re.Replace(sf.Name, "_")
End If
Next
End Sub
別の解決策は、2つのバッチファイルを使用することです。
run_rn.bat:
forfiles /m "*.log" /c " cmd /c rn @file"
rn.bat:
set LIST1=%1
set LIST2=%LIST1:_=;%
ren %LIST1% %LIST2%
バッチファイルは、変更するファイルと同じディレクトリにある必要があります。
12noonには無料のユーティリティがあり、正規表現を完全にサポートして大量のファイル名を変更できます。 ダウンロードへのリンクが記載された「NameTwister」情報ページ
私はこれを怒りで使ったことがありませんが、彼らの他のアプリ(特にディスプレイチェンジャー)を使って本当に幸せです。