Windows'ta hangi komut, özyinelemeli taşıma / yeniden adlandırma komutunu Unix'ten emüle eder?
Windows'ta hangi komut, özyinelemeli taşıma / yeniden adlandırma komutunu Unix'ten emüle eder?
Yanıtlar:
XP'nin for
komutunu kullanın . Örneğin %%x
tekrarlayan bir hareket yapmak için komut satırından ( bunun yerine bir toplu iş dosyasında kullanın ) şunları yapın:
for /r %x in (foo) do move "%x" "drive:\path\bar"
Özyinelemeli bir yeniden adlandırma yapmak için:
for /r %x in (*.c) do ren "%x" *.cpp
Örnek toplu iş:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
çalışır?
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 kutumda move komutuyla küçük bir örnek çalıştırdım ve işe yaradı. Tüm dosyalar ve dizinler kaynaktan desteye taşındı. kaynak ve hedef, dizin adlarıdır.
kaynak dest hareket et
ver Microsoft Windows XP [Sürüm 5.1.2600]
hareket /? Dosyaları taşır ve dosyaları ve dizinleri yeniden adlandırır. Bir veya daha fazla dosyayı taşımak için: HAREKET [/ Y | / -Y] [sürücü:] [yol] dosyaadı1 [, ...] hedef Bir dizini yeniden adlandırmak için: HAREKET [/ Y | / -Y] [sürücü:] [yol] dirname1 dirname2 [sürücü:] [yol] dosyaadı1 Dosyanın konumunu ve adını belirtir veya taşımak istediğiniz dosyaları Hedef Dosyanın yeni konumunu belirtir. Hedef Bir sürücü harfi ve iki noktadan oluşabilir, dizin adı veya bir kombinasyon. Eğer hareket ediyorsan yalnızca bir dosya, dosya adı da ekleyebilirsiniz. Taşıdığınızda dosyayı yeniden adlandırmak istiyorsunuz. [sürücü:] [yol] dirname1 Yeniden adlandırmak istediğiniz dizini belirtir. dirname2 Dizinin yeni adını belirtir. / Y İstediğinizi onaylamanızı isteyen istemeyi bastırır. varolan bir hedef dosyanın üzerine yaz. / -Y Üzerine yazmak istediğinizi onaylamanızı isteyen nedenler varolan bir hedef dosya. Anahtar / Y, COPYCMD ortam değişkeninde bulunabilir. Bu komut satırında / -Y ile geçersiz kılınabilir. Varsayılan MOVE komutu çalıştırılmadığı sürece üzerine yazma işlemi istenirse toplu komut dosyasında.
Yerleşik XCOPY komutu yakın. Özyinelemeli bir kopya yapacak, ancak yeniden adlandırmayı desteklediğini sanmıyorum.
for /r %%x in (%1) do ren "%%x" %2
bu dosyayı yinelemeli olarak yeniden adlandırır :-)
bir dosyaya kaydetme, uzantıdan uzantıya 2 bağımsız değişken verir.
örn .: dosya adı test.bat komutu: test * .avi * .bmp
avi uzantılı tüm dosyaları bmp olarak değiştirir (tüm alt klasörlerde :))
Not: 26 Ekim 13: 20'de Rob Kam tarafından cevaplanan mesaj için yapılan düzeltme budur. İçin verdi
/r %x in (*.c) do ren "%x" *.cpp
nerede var shud olarak %% yerine %
Bu benim için daha iyi çalıştı:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Kaynak: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
UNIX komutlarının çoğu için Windows bağlantı noktaları vardır:
Dizin isimlerinde arama yapacak ve değiştirecek bir VB Script oluşturdum ... Benim de bir dosya sürümüne sahibim, ancak bunun kendi betiğinizle başlamanıza yetecek kadar olduğunu düşünüyorum. Bu betiği kullanmamın yolu benim fileandreplacedirs.vbs
ve onu yeniden adlandırmak istediğim klasörlerle aynı klasöre koymam. Ayrıca, mutlaka klasöre yinelenmez, ancak küçük bir değişiklik yapılabilir
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
Basit bir DOS komutu kullanın.
cd dosya uzantılarını art arda yeniden adlandırmak istediğiniz kaynak dizine.
Bu komutu yazın:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
if exist
Dosya her klasörde bulunmadığında, hataların geri alınmasını önlemek için ekledim (bu, Jenkins'te önemli olduğu için bir derlemeyi bozmaz):
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
Özyinelemeli bir yeniden adlandırma yapmak için:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Örnek toplu iş:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell senin arkadaşın. Toplu iş dosyası veya komut dosyası gerekmez. Örneğin, tüm .tiff dosyalarını uzak bir dizinde .tif olarak yinelemek üzere yeniden adlandırmak için Powershell'den aşağıdaki komutu çalıştırabilirsiniz:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Ben de çalışan bu python betiğini buldum:
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'u yoluma ekledim ve yukarıdaki Python komut dosyasını bir 'utils' klasörüne koydum. Daha sonra çalıştırmak için bu basit toplu komut dosyasını yarattım: rn.bat:
python \utils\rn.py %1 %2 %3
Ayrıca yukarıdaki python betiğini argümanlarını komut satırından almak için güncelledim. 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)
Sonunda, şimdi yapılması gereken tek şey şunun gibi bir şey:
>rn . .foo .bar
veya
>rn \ .exe .txt
İkincisi ile eğlenin :)