Какая команда в 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).
Я просто запустил небольшой пример в моем Windows XP SP2 с командой move, и это сработало. Все файлы и каталоги были перемещены из источника в dest. source и dest - это имена каталогов.
переместить источник Dest
вер Microsoft Windows XP [Версия 5.1.2600]
переехать /? Перемещает файлы и переименовывает файлы и каталоги. Чтобы переместить один или несколько файлов: ДВИЖЕНИЕ / -Y] [диск:] [путь] имя_файла1 [, ...] место назначения Чтобы переименовать каталог: ДВИЖЕНИЕ / -Y] [диск:] [путь] dirname1 dirname2 [диск:] [путь] имя_файла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 (во всех подпапках :))
Примечание: это исправление для поста, на который ответил Роб Кэм 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 Script, который будет выполнять поиск и замену имен каталогов ... У меня тоже есть версия файлов, но я думаю, что этого достаточно, чтобы вы начали работать со своим собственным сценарием. То, как я использую этот скрипт, это то, что у меня есть 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
Powershell - твой друг. Пакетные файлы или сценарии не нужны. Например, чтобы рекурсивно переименовать все файлы .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
Удачи со вторым :)