Яка команда в Windows імітує рекурсивну команду переміщення / перейменування від Unix?
Яка команда в Windows імітує рекурсивну команду переміщення / перейменування від Unix?
Відповіді:
Використовуйте for
команду XP . Наприклад, з командного рядка ( %%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).
Я просто запускаю невеликий приклад у вікні SP2 для Windows XP з командою переміщення, і вона спрацювала. Усі файли та каталоги були переміщені від джерела до призначення. джерело та dest - це назви директорій.
перемістити джерело dest
вер Microsoft Windows XP [Версія 5.1.2600]
рухатися /? Переміщує файли та перейменовує файли та каталоги. Щоб перемістити один або кілька файлів: ПОВЕРНУТИСЯ [/ Y | / -Y] [диск:] [шлях] ім'я файлу1 [, ...] призначення Щоб перейменувати каталог: ПОВЕРНУТИСЯ [/ Y | / -Y] [диск:] [шлях] dirname1 dirname2 [drive:] [path] filename1 Вказує місце та ім'я файлу або файли, які потрібно перемістити. призначення Вказує нове розташування файлу. Місце призначення може складатися з букви приводу та двокрапки, а ім'я каталогу або їх комбінація. Якщо ви рухаєтесь лише один файл, ви також можете включити ім'я файлу, якщо ви хочете перейменувати файл під час переміщення. [drive:] [path] 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 (у всіх папках :))
Примітка. Це виправлення публікації, яку 26 жовтня о 13:20 відповів Роб Кам. Він дав за
/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
Існують порти Windows для більшості команд UNIX:
Я створив сценарій 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.
cd до вихідного каталогу, де потрібно перейменувати розширення файлів рекурсивно.
Введіть цю команду:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Я додав, if exist
щоб уникнути повернення помилок (це важливо для Дженкінса, щоб воно не порушувало збірку), коли файл не існує у кожній папці:
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
Пауершелл - твій друг. Не потрібні пакетні файли чи сценарії. Наприклад, щоб рекурсивно перейменувати всі .tiff файли на .tif у віддаленому каталозі, ви можете запустити наступну команду з Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Я знайшов цей сценарій 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
Повеселіться другим :)