Movendo arquivos / pastas ocultos com a linha de comando ou arquivo em lote

15

Questão

Alguém sabe como mover arquivos e pastas que possuem o atributo oculto, sistema ou somente leitura definido na linha de comando ou em um arquivo em lotes? (Não, excluir os atributos primeiro não é uma opção, pois não há uma maneira prática de saber quais atributos foram configurados para reconfigurá-los após a movimentação.)


(Tentativas falhas

  1. O uso do movecomando básico não funciona com itens com o atributo oculto ou do sistema definido e, por algum motivo, ele não possui opções para especificar atributos como os comandos dire del.

  2. Tentei usar um utilitário que escrevi que usa a função de operação de arquivo do shell, mas que requer o uso start /wpara impedir a execução do arquivo em lotes e queixa-se do suporte a nomes longos por algum motivo.

  3. Tentei usar robocopy, mas ele primeiro copia os arquivos e exclui os originais em vez de simplesmente mover a fonte (o que resulta em um atraso frustrante, mesmo com a saída excessiva redirecionada para nul).

(Surpreendentemente, parece que poucas pessoas já precisaram mover arquivos ocultos da linha de comando. Tudo o que pude encontrar foi essa pessoa que abandonou a tentativa.)

Synetech
fonte
4
Se você estiver criando o \tempdiretório, por que não renomear / mover o %1diretório para \temp? Ou esse é apenas o caso simplificado?
22412 Ken
Esse é realmente um caso simplificado. Simplesmente renomear não funcionaria.
Synetech 23/02/12
Por que remover um atributo não é uma opção? Essa seria a maneira correta (e pretendida) de fazê-lo.
Rook
> Por que remover um atributo não é uma opção? @ Idigas, como exatamente você saberia quais atributos foram definidos em cada item para que possam ser redefinidos corretamente? > Essa seria a maneira correta (e pretendida) de fazê-lo. Isso não parece certo.
Synetech 23/02/12
Perdoe minha ignorância, mas algo como jamesewelch.com/2008/05/01/… funcionaria?
Dr. gatinho

Respostas:

6

Consegui mover com êxito arquivos ocultos somente leitura usando o MV.EXE dos utilitários GNU for Win32. O arquivo de destino mantém os atributos ocultos somente leitura.

Você terá que baixar o pacote inteiro:

http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php

RobW
fonte
1
Não é ruim. Isso funciona, infelizmente, morre quando se lida com arquivos que começam com --; pensa que é um argumento em vez de um nome de arquivo.
Synetech 23/03
2
Não é ruim? É isso aí? Resolve seu pedido. Não vejo nada sobre o requisito '--filename' ou teria testado. Desculpas, mas requisitos ocultos são um esporte ruim.
RobW 23/03
Sim, nada mal. Ele faz apenas a operação básica sobre a qual perguntei. Se ele não pode lidar com nomes de arquivos válidos do Windows, então não é muito útil agora, é? Manipular nomes de arquivos corretamente não é um requisito "oculto".
Synetech 23/03
3
@ Synetech, você apenas precisa qualificar o nome do arquivo:mv .\--1.txt newdirectory
dangph
4
Utilitários Unix em geral usam --foopara denotar argumentos de linha de comando. Para dar suporte a nomes de arquivos iniciados com --, a maioria deles aceita um argumento especial --para indicar o final dos argumentos da linha de comando e o início dos nomes dos arquivos. Não tenho certeza se mvé um desses comandos, mas se for, você deve ser capaz de: #mv -- --weirdFileName.gotcha betterFileName.txt
Ben Ben
5

Acabei de fazer isso usando:

xcopy /H hidden_file destination_file
del /AH hidden_file
Ben
fonte
1
A pergunta pergunta como mover arquivos. O OP sabe como copiar e excluir e não deseja fazer isso. Além disso, ele diz que já sabe como excluir arquivos ocultos.
Scott
2
Scott está correto; se os volumes de origem e destino forem os mesmos, a última coisa que você deseja fazer é "mover" um arquivo, copiando-o primeiro. Na melhor das hipóteses, é inútil com um único arquivo pequeno, mas com um arquivo grande ou com muitos arquivos pequenos (quanto mais com arquivos grandes), é horrível (alta carga de CPU e disco). Isso fica ainda pior se você estiver movendo uma árvore de diretórios inteira. O sistema de arquivos já suporta uma mudança rápida e fácil, alterando os ponteiros de entrada de diretório; o problema está na interface do sistema operacional, o que impede isso com arquivos ocultos.
Synetech
Justo, não é uma jogada real. E para grandes movimentos, isso pode gerar muita sobrecarga. Mas o OP nunca disse que copiar + excluir era necessariamente uma coisa ruim e, independentemente disso, esse é um dos principais hits nas pesquisas na Web sobre como mover um arquivo oculto da linha de comando e funcionou para o que eu tinha que fazer . Eu imagino que as pessoas que procuram apenas mover alguns arquivos ocultos também possam usá-lo, em vez de instalar as ferramentas GNU ou PowerShell. Muito chato que o comando "mover" simplesmente não possa fazer isso.
26513 Ben Ben
1
Da pergunta: (Falha) tentativas ... 3. Tentei usar robocopy, mas primeiro copia os arquivos e exclui os originais em vez de simplesmente mover a fonte (o que resulta em um atraso frustrante, ...). ”
Scott
É justo ... acho que li isso como "Não quero usar robocopy" em vez de "Não quero uma operação de copiar + excluir". Mas entendo o seu ponto.
21713 Ben Ben
3

Powershell v2:

move-item -force   '--1.txt' newdirectory

também move arquivos ocultos com atributos ocultos e de sistema definidos. Trabalhará com arquivos começando com '-'.

RobW
fonte
1
Tenho certeza de que funcionaria, mas o PowerShell é terrivelmente lento em comparação com o prompt de comando normal. E não, isso não é um requisito "oculto", indiquei claramente minha aversão ao atraso do Robocopy na questão. (Por favor, não me diga que ele funciona rápido no seu sistema, porque isso não me ajuda de forma alguma. No meu sistema, são necessários alguns segundos para carregar e até mesmo pressionar Tabpara concluir um nome de arquivo leva> 1 segundo, o que é necessário de magnitude mais lenta do que em cmd. então, se você estiver disposto a me comprar um novo sistema, em seguida, PS não vai ajudar).
Synetech
Solução PowerShell ainda mais fácil:mv .oldfile .newfile
Jay Sullivan
0

Que tal agora?

C:\Temp>attrib hidden.txt
A   H        C:\temp\hidden.txt

C:\Temp>mklink /H renamed.txt hidden.txt
Hardlink created for renamed.txt <<===>> hidden.txt

C:\Temp>del /AH hidden.txt

C:\Temp>attrib renamed.txt
A   H        C:\temp\renamed.txt
Ben
fonte
Obviamente, isso só funciona dentro das restrições de onde os hardlinks são permitidos. Eu acho que isso significa que o destino do arquivo deve estar na mesma partição do mesmo disco físico. Mas se essa restrição não for atendida, tenho certeza de que uma cópia + exclusão seria necessária de qualquer maneira, sob o capô.
21713 Ben Ben
Idéia interessante. É claro que é muito limitado (só uso NTFS para a unidade do sistema Windows 7 e FAT32 para todo o resto. Além disso, geralmente uso o Windows XP.) Também parece funcionar de maneira inconsistente com diferentes combinações de atributos. Por exemplo, se você definir o atributo somente leitura, ele não permitirá que você exclua o arquivo “novo” na primeira vez que tentar excluí-lo, mas remover o atributo. ఠ_ ఠ E, claro, não funciona para pastas.
Synetech
0

Tivemos o PowerShell e o mvcomando. Portanto, para completar, veja como fazê-lo com o TCC / LE da JP Software , cujos comandos movee rentêm uma /a:opção comum a muitos de seus comandos que examinam diretórios em busca de arquivos nos quais operar:

[C: \ Users \ JdeBP] toque em / c --wibble--
11/03/2014 20: 29: 18.868 C: \ Users \ JdeBP \ - wibble--

[C: \ Users \ JdeBP] attrib + h + s. \ - wibble--
___A___________ -> _HSA___________ C: \ Usuários \ JdeBP \ - wibble--

[C: \ Users \ JdeBP] move / a: hs --wibble-- --wobble--
C: \ Users \ JdeBP \ - wibble-- -> C: \ Usuários \ JdeBP \ - wobble--
     1 arquivo movido

[C: \ Users \ JdeBP] ren / a: hs --wobble-- --wurble--
C: \ Users \ JdeBP \ - wobble-- -> C: \ Users \ JdeBP \ - wurble--
     1 arquivo renomeado

C: \ Users \ JdeBP] dir / a: hs / t / m / k --wurble--
11/03/2014 20:29 0 _HSA___________ --wurble--

[C: \ Usuários \ JdeBP]

Leitura adicional

  • JP Software. MOVER . Tome a ajuda do Command / TCC.
  • JP Software. REN . Tome a ajuda do Command / TCC.
JdeBP
fonte
Eu não estou disposto a comprar um software comercial para fazer o que deveria ser possível com um programa pequeno e gratuito (e eu posso muito bem acabar tendo que escrevê-lo como de costume). Independentemente, você codificou os atributos, o que não é bom porque não é possível prever quais atributos uma pasta pode ter. Além disso, ao tocá-lo, você perdeu o carimbo de data / hora original.
Synetech