Que comando no Windows emula o comando recursivo mover / renomear do Unix?
Que comando no Windows emula o comando recursivo mover / renomear do Unix?
Respostas:
Use o for
comando do XP . Por exemplo, na linha de comando (em %%x
vez disso, use um arquivo em lotes ) para executar uma movimentação recursiva:
for /r %x in (foo) do move "%x" "drive:\path\bar"
Para fazer uma renomeação recursiva, faça:
for /r %x in (*.c) do ren "%x" *.cpp
Lote de exemplo:
for /r "< DIR >" %%x in (*.c) do ren "%%x" *.cpp
*.*
funcionarão?
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).
Acabei de executar um pequeno exemplo na minha caixa do Windows XP SP2 com o comando move e funcionou. Todos os arquivos e diretórios foram movidos da origem para o destino. source e dest são nomes de diretório.
mover origem dest
ver Microsoft Windows XP [Versão 5.1.2600]
mover /? Move arquivos e renomeia arquivos e diretórios. Para mover um ou mais arquivos: MOVER [/ Y | / -Y] [drive:] [caminho] filename1 [, ...] destino Para renomear um diretório: MOVER [/ Y | / -Y] [drive:] [caminho] dirname1 dirname2 [drive:] [path] filename1 Especifica o local e o nome do arquivo ou arquivos que você deseja mover. destino Especifica o novo local do arquivo. Destino pode consistir em uma letra de unidade e dois pontos, um nome do diretório ou uma combinação. Se você estiver se movendo apenas um arquivo, você também pode incluir um nome de arquivo se você deseja renomear o arquivo ao movê-lo. [drive:] [caminho] dirname1 Especifica o diretório que você deseja renomear. dirname2 Especifica o novo nome do diretório. / Y Suprime a solicitação para confirmar que você deseja sobrescreva um arquivo de destino existente. / -Y Faz com que o prompt confirme que você deseja substituir um arquivo de destino existente. A opção / Y pode estar presente na variável de ambiente COPYCMD. Isso pode ser substituído por / -Y na linha de comando. O padrão é solicitar sobrescrições, a menos que o comando MOVE esteja sendo executado a partir de dentro de um script em lote.
O comando XCOPY embutido está fechado. Ele fará uma cópia recursiva, mas não acho que seja compatível com renomeação.
for /r %%x in (%1) do ren "%%x" %2
isso renomeará o arquivo recursivamente :-)
salvar em um arquivo forneça 2 argumentos de extensão e de extensão.
ex: nome do arquivo é test.bat comando: test * .avi * .bmp
renomeia todos os arquivos com extensão avi para bmp (em todas as subpastas :))
Nota: Isso é correção para o post respondido em 26 de outubro às 13:20 por Rob Kam. Ele deu por
/r %x in (*.c) do ren "%x" *.cpp
onde, como ele tem, %% em vez de %
Isso funcionou melhor para mim:
FOR /R "C:\folder1\folder2\" %i in (.,*) DO MOVE /Y "%i" "C:\folder1\"
Fonte: http://www.islamadel.com/index.php/notes/6-computer/10-windows-command-line
Existem portas do Windows para a maioria dos comandos UNIX:
Eu criei um script VB que fará uma pesquisa e substituirá os nomes de diretório ... Eu também tenho uma versão de arquivos, no entanto, acho que isso é suficiente para você começar com seu próprio script. O jeito que eu uso esse script é eu tenho um fileandreplacedirs.vbs
e coloco na mesma pasta que as pastas que quero renomear. Além disso, ele não é necessariamente recursivo para a pasta, mas poderia com uma pequena modificação
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
Use um comando simples do DOS.
cd para o diretório de origem em que deseja renomear as extensões de arquivo recursivamente.
Digite este comando:
ren *.[CurrentFileExtension] *.[DesiredFileExtension]
Eu adicionei if exist
para evitar retornos de erro (isso é importante no Jenkins para não quebrar uma compilação) quando o arquivo não existe em todas as pastas:
for /r %x in (foo) do if exist "%x" move "%x" "drive:\path\bar"
Para fazer uma renomeação recursiva, faça:
for /r %x in (*.c) do if exist "%x" ren "%x" *.cpp
Lote de exemplo:
for /r "< DIR >" %%x in (*.c) do if exist "%%x" ren "%%x" *.cpp
Powershell é seu amigo. Não são necessários arquivos ou scripts em lote. Por exemplo, para renomear recursivamente todos os arquivos .tiff para .tif em um diretório remoto, você pode executar o seguinte comando no Powershell:
get-childitem "\\\servername\d$\path" -recurse -Include *.tiff | Rename-Item -NewName {
$_.Name.replace(".tiff",".tif") }
Encontrei este script python que também funciona:
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)
Encontrado em: http://gomputor.wordpress.com/2008/09/29/change-the-extension-of-multiple-files-in-a-chosen-directory-with-python/
Adicionei Python ao meu caminho e coloquei o script Python acima em uma pasta 'utils'. Criei esse script em lote simples para executá-lo: rn.bat:
python \utils\rn.py %1 %2 %3
Também atualizei o script python acima para obter seus argumentos da linha de comando. 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)
Finalmente, tudo o que precisamos fazer agora é algo como isto:
>rn . .foo .bar
ou
>rn \ .exe .txt
Divirta-se com o segundo :)