WindowsのどのコマンドがUnixからの再帰的な移動/名前変更コマンドをエミュレートしますか?
WindowsのどのコマンドがUnixからの再帰的な移動/名前変更コマンドをエミュレートしますか?
回答:
XPのfor
コマンドを使用します。たとえば、コマンドラインから(%%x
代わりにバッチファイルで使用)、再帰的な移動を行います。
for /r %x in (foo) do move "%x" "drive:\path\bar"
再帰的な名前変更を行うには:
for /r %x in (*.c) do ren "%x" *.cpp
バッチの例:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
?
robocopy "C:\Source Folder" "C:\Destination Folder" /E /COPYALL /XJ
Description of parameters:
/E - copy subdirectories, including Empty ones (/S to exclude empty ones)
/COPYALL - COPY ALL file info (equivalent to /COPY:DATSOU)
/XJ - eXclude Junction points and symbolic links. (normally included by default).
Windows XP SP2ボックスでmoveコマンドを使用して小さな例を実行しただけで、機能しました。すべてのファイルとディレクトリがソースからデスティネーションに移動されました。sourceとdestはディレクトリ名です。
移動元dest
ver Microsoft Windows XP [バージョン5.1.2600]
移動/? ファイルを移動し、ファイルとディレクトリの名前を変更します。 1つ以上のファイルを移動するには: 移動[/ Y | / -Y] [ドライブ:] [パス]ファイル名1 [、...]宛先 ディレクトリの名前を変更するには: 移動[/ Y | / -Y] [ドライブ:] [パス] dirname1 dirname2 [ドライブ:] [パス]ファイル名1ファイルの場所と名前を指定します または移動したいファイル。 destinationファイルの新しい場所を指定します。先 ドライブ文字とコロンで構成できます、 ディレクトリ名、または組み合わせ。動いている場合 ファイルが1つだけの場合、ファイル名を含めることもできます。 移動するときにファイルの名前を変更する必要があります。 [ドライブ:] [パス] dirname1名前を変更するディレクトリを指定します。 dirname2ディレクトリの新しい名前を指定します。 / Y確認のプロンプトを抑制します 既存の宛先ファイルを上書きします。 / -Y上書きすることを確認するプロンプトを表示します 既存の宛先ファイル。 スイッチ/ Yは、COPYCMD環境変数に存在する場合があります。 これは、コマンドラインで/ -Yで上書きできます。デフォルトは MOVEコマンドが実行されていない限り、上書きを促す バッチスクリプト内。
組み込みのXCOPYコマンドは近いです。再帰コピーを行いますが、名前変更をサポートしているとは思いません。
for /r %%x in (%1) do ren "%%x" %2
これは再帰的にファイルの名前を変更します:-)
ファイルに保存するには、拡張子から拡張子までの2つの引数を指定します。
例:ファイル名はtest.batコマンド:test * .avi * .bmp
拡張子がaviのすべてのファイルの名前をbmpに変更します(すべてのサブフォルダーで:))
注:これは、10月26日13時20分にRob Kamが回答した投稿の修正です。彼は与えた
/r %x in (*.c) do ren "%x" *.cpp
ここでは、%の代わりに%%があります
これは私にとってはうまくいきました:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
ソース:http : //www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
ほとんどのUNIXコマンド用のWindowsポートがあります。
ディレクトリ名で検索と置換を行うVBスクリプトを作成しました...ファイルバージョンもありますが、これで独自のスクリプトを開始できます。このスクリプトの使用方法は、を持ち、fileandreplacedirs.vbs
名前を変更するフォルダーと同じフォルダーに配置することです。また、必ずしもフォルダーに再帰する必要はありませんが、少し変更することで可能です
search1 = InputBox("Search for...", "", "")
replace1 = InputBox("replace with...", "", "")
Dim MyFile
MyFiles = GetFileArray(".")
For Each MyFile In MyFiles
NewFilename = Replace(MyFile.Name, search1, replace1)
If InStr( MyFile.Name, search1 ) Then MyFile.Name = NewFilename
Next
MsgBox "Done..."
function GetFileArray(ByVal vPath)
'Get our objects...
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.Getfolder(vPath)
Set Files = Folder.SubFolders
'Resize the local array
'Arrays are 0 based but Files collection is 1 based.
if Files.count = 0 then
GetFileArray = array()
Exit Function
Else
Index = 0
Redim FileList(Files.Count-1)
For Each File In Files
set FileList(Index) = File
Index = Index + 1
Next
GetFileArray = FileList
End If
'Always good practice to explicitly release objects...
Set FSO = Nothing
Set Folder = Nothing
Set Files = Nothing
End function
単純なDOSコマンドを使用します。
ファイル拡張子の名前を再帰的に変更するソースディレクトリに移動します。
次のコマンドを入力します。
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
if exist
ファイルがすべてのフォルダーに存在しない場合にエラーが返されないようにするために追加しました(Jenkinsでは重要なので、ビルドを中断しません)。
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
再帰的な名前変更を行うには:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
バッチの例:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
私も同様に動作するこのPythonスクリプトを見つけました:
for root, dirs, files in os.walk(cur_dir):
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
oldname = os.path.join(root, filename)
newname = oldname.replace(old_ext, new_ext)
os.rename(oldname, newname)
Pythonをパスに追加し、上記のPythonスクリプトを「utils」フォルダーに入れました。次に、次の単純なバッチスクリプトを作成して実行しました。rn.bat:
python \utils\rn.py %1 %2 %3
また、上記のpythonスクリプトを更新して、コマンドラインから引数を取得しました。rn.py:
import sys
import os
cur_dir = sys.argv[1]
old_ext = sys.argv[2]
new_ext = sys.argv[3]
#print cur_dir, old_ext, new_ext
for root, dirs, files in os.walk(cur_dir):
for filename in files:
file_ext = os.path.splitext(filename)[1]
if old_ext == file_ext:
oldname = os.path.join(root, filename)
newname = oldname.replace(old_ext, new_ext)
os.rename(oldname, newname)
最後に、今やるべきことは次のようなものです。
>rn . .foo .bar
または
>rn \ .exe .txt
2番目のものを楽しんでください:)