Lệnh nào trong Windows mô phỏng lệnh di chuyển / đổi tên đệ quy từ Unix?
Lệnh nào trong Windows mô phỏng lệnh di chuyển / đổi tên đệ quy từ Unix?
Câu trả lời:
Sử dụng for
lệnh của XP . Ví dụ: từ dòng lệnh ( %%x
thay vào đó sử dụng tệp bó ) để thực hiện di chuyển đệ quy:
for /r %x in (foo) do move "%x" "drive:\path\bar"
Để thực hiện đổi tên đệ quy làm:
for /r %x in (*.c) do ren "%x" *.cpp
Lô ví dụ:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
hoạt động?
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).
Tôi chỉ chạy một ví dụ nhỏ trong hộp Windows XP SP2 của mình bằng lệnh di chuyển và nó đã hoạt động. Tất cả các tập tin và thư mục đã được chuyển từ nguồn sang số phận. nguồn và mệnh là tên thư mục.
di chuyển nguồn mệnh
ver Microsoft Windows XP [Phiên bản 5.1.2600]
di chuyển /? Di chuyển tập tin và đổi tên tập tin và thư mục. Để di chuyển một hoặc nhiều tệp: DI CHUYỂN [/ Y | / -Y] [drive:] [path] filename1 [, ...] đích Để đổi tên một thư mục: DI CHUYỂN [/ Y | / -Y] [ổ đĩa:] [đường dẫn] dirname1 dirname2 [drive:] [path] filename1 Chỉ định vị trí và tên của tệp hoặc tập tin bạn muốn di chuyển. đích Chỉ định vị trí mới của tệp. Nơi Đến có thể bao gồm một ký tự ổ đĩa và dấu hai chấm, một tên thư mục, hoặc kết hợp. Nếu bạn đang di chuyển chỉ một tệp, bạn cũng có thể bao gồm tên tệp nếu bạn muốn đổi tên tập tin khi bạn di chuyển nó. [drive:] [path] dirname1 Chỉ định thư mục bạn muốn đổi tên. dirname2 Chỉ định tên mới của thư mục. / Y Bỏ qua lời nhắc để xác nhận bạn muốn ghi đè lên một tệp đích hiện có. / -Y Nguyên nhân nhắc nhở xác nhận bạn muốn ghi đè một tệp đích hiện có. Công tắc / Y có thể có trong biến môi trường COPYCMD. Điều này có thể được ghi đè bằng / -Y trên dòng lệnh. Mặc định là để nhắc về ghi đè trừ khi lệnh MOVE đang được thực thi từ trong một tập lệnh bó.
Lệnh XCOPY tích hợp đã đóng. Nó sẽ thực hiện một bản sao đệ quy, nhưng tôi không nghĩ nó hỗ trợ đổi tên.
for /r %%x in (%1) do ren "%%x" %2
điều này sẽ đổi tên tập tin đệ quy :-)
lưu trong một tệp đưa ra 2 đối số từ phần mở rộng và phần mở rộng.
ví dụ: tên tệp là test.bat lệnh: test * .avi * .bmp
nó đổi tên tất cả các tệp có phần mở rộng avi thành bmp (trong tất cả các thư mục con :))
Lưu ý: Đây là chỉnh sửa cho bài đăng được trả lời ngày 26 tháng 10 lúc 13:20 bởi Rob Kam. Anh ấy đã cho
/r %x in (*.c) do ren "%x" *.cpp
khi mà shud có %% thay vì %
Điều này làm việc tốt hơn cho tôi:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Nguồn: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Có các cổng Windows cho hầu hết các lệnh UNIX:
Tôi đã tạo VB Script để thực hiện tìm kiếm và thay thế tên thư mục ... Tôi cũng có phiên bản tệp, tuy nhiên, tôi nghĩ rằng điều này là đủ để bạn bắt đầu với tập lệnh của riêng mình. Cách tôi sử dụng tập lệnh này là tôi có một fileandreplacedirs.vbs
và đặt nó vào cùng thư mục với các thư mục tôi muốn đổi tên. Ngoài ra, nó không nhất thiết phải truy xuất vào thư mục, nhưng có thể với một chút sửa đổi
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
Sử dụng lệnh DOS đơn giản.
cd vào thư mục nguồn nơi bạn muốn đổi tên các phần mở rộng tệp theo cách đệ quy.
Gõ lệnh này:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Tôi đã thêm if exist
để tránh trả về lỗi (vấn đề ở Jenkins vì vậy nó không phá vỡ bản dựng) khi tệp không tồn tại trong mọi thư mục:
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
Để thực hiện đổi tên đệ quy làm:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Lô ví dụ:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell là bạn của bạn. Không có tập tin bó hoặc tập lệnh cần thiết. Ví dụ: để đổi tên đệ quy tất cả các tệp .tiff thành .tif trong một thư mục từ xa, bạn có thể chạy lệnh sau từ Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Tôi tìm thấy kịch bản python này cũng hoạt động:
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)
Tìm thấy tại: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multipl-files-in-a-chosen-directory-with-python/
Tôi đã thêm Python vào đường dẫn của mình và đặt tập lệnh Python ở trên vào thư mục 'utils'. Sau đó tôi đã tạo tập lệnh bó đơn giản này để chạy nó: rn.bat:
python \utils\rn.py %1 %2 %3
Tôi cũng đã cập nhật kịch bản python ở trên để lấy đối số của nó từ dòng lệnh. 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)
Cuối cùng, tất cả những gì cần làm bây giờ là một cái gì đó như thế này:
>rn . .foo .bar
hoặc là
>rn \ .exe .txt
Hãy vui vẻ với cái thứ hai :)