Spostamento di file / cartelle nascosti con la riga di comando o il file batch


15

Domanda

Qualcuno sa come spostare file e cartelle con l'attributo nascosto, di sistema o di sola lettura impostato dalla riga di comando o da un file batch? (No, rimuovere prima gli attributi non è un'opzione poiché non esiste un modo pratico per sapere quali attributi sono stati impostati al fine di reimpostarli dopo lo spostamento.)


Tentativi (non riusciti)

  1. L'uso del movecomando di base non funziona con gli elementi con l' attributo nascosto o di sistema impostato e per qualche motivo, non ha opzioni per specificare gli attributi come i comandi dire del.

  2. Ho provato a utilizzare un'utilità che ho scritto che utilizza la funzione di operazione dei file della shell, ma che richiede l'utilizzo start /wper impedire che il file batch venga eseguito in anticipo, e per qualche motivo si lamenta del supporto di nomi di file lunghi.

  3. Ho provato a usarlo robocopy, ma prima copia i file e poi elimina gli originali invece di spostare semplicemente l'origine (il che si traduce in un ritardo frustrante, anche con l'output eccessivo reindirizzato a nul).

(Sorprendentemente sembra che poche persone abbiano mai avuto bisogno di spostare file nascosti dalla riga di comando. Tutto quello che ho potuto trovare era questa persona che ha abbandonato il tentativo.)


4
Se stai creando la \tempdirectory, perché non rinominare / spostare la %1directory in \temp? O è solo il caso semplificato?
Ken,

Questo è davvero un caso semplificato. La semplice ridenominazione non funzionerebbe.
Synetech,

Perché eliminare un attributo non è un'opzione? Sarebbe il modo corretto (e previsto) per farlo.
Arriva il

> Perché rimuovere un attributo non è un'opzione? @Idigas, come sapresti esattamente quali attributi sono stati impostati su ogni singolo elemento in modo che possano essere correttamente reimpostati? > Sarebbe il modo corretto (e previsto) di farlo. Non suona affatto bene.
Synetech,

Perdona la mia ignoranza, ma qualcosa come jamesewelch.com/2008/05/01/… funziona?
Dr Kitty,

Risposte:


6

Sono stato in grado di spostare correttamente i file nascosti di sola lettura usando MV.EXE dalla GNU per le utility Win32. Il file di destinazione conserva gli attributi nascosti di sola lettura.

Dovrai scaricare l'intero pacchetto:

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


1
Non male. Funziona, sfortunatamente muore quando si tratta di file che iniziano con --; pensa che sia un argomento anziché un nome file.
Synetech,

2
Non male? Questo è tutto? Risolve la tua richiesta. Non vedo nulla sul requisito '--filename', o avrei provato per questo. Ci scusiamo, ma i requisiti nascosti sono sport scadente.
RobW,

Sì, non male. Fa solo l'operazione di base di cui ho chiesto. Se non è in grado di gestire nomi di file Windows validi, non è molto utile adesso? Gestire correttamente i nomi dei file non è un requisito "nascosto".
Synetech,

3
@Synetech, Devi solo qualificare il nome del file:mv .\--1.txt newdirectory
dangph

4
Le utility Unix in generale usano --fooper indicare argomenti da riga di comando. Per supportare i nomi di file che iniziano con --, la maggior parte accetta un argomento speciale --per indicare la fine degli argomenti della riga di comando e l'inizio dei nomi dei file. Non sono sicuro che mvsi tratti di uno di questi comandi, ma se lo è, dovresti essere in grado di:mv -- --weirdFileName.gotcha betterFileName.txt
Ben

5

Ho appena realizzato questo usando:

xcopy /H hidden_file destination_file
del /AH hidden_file

1
La domanda chiede come spostare i file. L'OP sa come copiare ed eliminare e non vuole farlo. Inoltre, dice che sa già come eliminare i file nascosti.
Scott,

2
Scott ha ragione; se i volumi di origine e destinazione sono gli stessi, l'ultima cosa che vuoi fare è "spostare" un file copiandolo prima. Nella migliore delle ipotesi, è inutile con un singolo file di piccole dimensioni, ma con un file di grandi dimensioni o molti file di piccole dimensioni (per non parlare di molti file di grandi dimensioni), è orribile (elevato carico della CPU e del disco). Questo è tanto peggio se si sposta un intero albero di directory. Il file system supporta già uno spostamento rapido e semplice modificando i puntatori di immissione della directory; il problema è con l'interfaccia del sistema operativo che impedisce di farlo con i file nascosti.
Synetech,

Abbastanza giusto, non è una vera mossa. E per grandi mosse può dare un sacco di spese generali. Ma l'OP non ha mai effettivamente detto che una copia + eliminazione è stata necessariamente una brutta cosa e, indipendentemente da ciò, questo è uno dei principali successi nelle ricerche web per come spostare un file nascosto dalla riga di comando, e ha funzionato per quello che dovevo fare . Immagino che anche le persone che cercano solo come spostare alcuni file nascosti potrebbero usarlo invece di installare strumenti GNU o PowerShell. Molto fastidioso che il comando "sposta" semplicemente non può farlo.
Ben,

1
Dalla domanda: " Tentativi (non riusciti) ... 3. Ho provato a utilizzare robocopy, ma prima copia i file e poi elimina gli originali invece di spostare semplicemente l'origine (il che si traduce in un ritardo frustrante, ...)."
Scott

Abbastanza giusto ... Immagino di averlo letto come "Non voglio usare robocopy" invece di "Non voglio un'operazione di copia + cancellazione". Ma vedo il tuo punto.
Ben

3

Powershell v2:

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

sposta anche i file nascosti con set di attributi nascosti e di sistema. Funzionerà con i file che iniziano con '-'.


1
Sono sicuro che funzionerebbe, ma PowerShell è estremamente lento rispetto al normale prompt dei comandi. E no, questo non è un requisito "nascosto", ho chiaramente indicato la mia antipatia per il ritardo di Robocopy nella domanda. (Per favore, non dirmi che funziona velocemente sul tuo sistema perché non mi aiuta in alcun modo. Sul mio sistema ci vogliono solo pochi secondi per caricare, e anche solo premere Tabper completare un nome file richiede> 1 secondo che è ordine di magnitudo più lentamente che in cmd. Quindi, a meno che tu non sia disposto a comprarmi un nuovo sistema, allora PS non mi aiuterà.)
Synetech

Soluzione PowerShell ancora più semplice:mv .oldfile .newfile
Jay Sullivan,

0

Cosa ne pensi di questo?

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

Ovviamente questo funziona solo nei limiti di dove sono consentiti i collegamenti fisici. Penso che questo significhi che la destinazione del file deve trovarsi sulla stessa partizione dello stesso disco fisico. Ma se questo vincolo non viene rispettato, sono abbastanza sicuro che sarebbe comunque necessaria una copia + eliminazione, sotto il cofano.
Ben

Idea interessante. Ovviamente è troppo limitato (utilizzo solo NTFS per l'unità di sistema di Windows 7 e FAT32 per tutto il resto. Inoltre, di solito uso Windows XP.) Sembra anche che funzioni in modo incoerente con diverse combinazioni di attributi. Ad esempio, se imposti l'attributo di sola lettura, non ti consentirà di eliminare il "nuovo" file la prima volta che provi a eliminarlo, invece rimuove l'attributo. ಠ_ ఠ E, naturalmente, non funziona per le cartelle.
Synetech,

0

Abbiamo avuto PowerShell e il mvcomando. Per completezza, quindi, ecco come farlo con TCC / LE di JP Software , i cui comandi movee renhanno entrambi /a:un'opzione comune a molti dei suoi comandi che scansionano le directory per i file su cui operare:

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

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

[C: \ Users \ JdeBP] move / a: hs --wibble-- --wobble--
C: \ Users \ JdeBP \ - wibble-- -> C: \ Users \ JdeBP \ - wobble--
     1 file spostato

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

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

[C: \ Users \ JdeBP]

Ulteriori letture

  • JP Software. SPOSTA . Accetta Command / TCC Help.
  • JP Software. REN . Accetta Command / TCC Help.

Io per primo non ho intenzione di acquistare un software commerciale per fare ciò che dovrei essere fattibile con un piccolo programma gratuito (e potrei benissimo finire per doverlo scrivere da solo come al solito). Indipendentemente da ciò, hai codificato gli attributi che non vanno bene perché non puoi prevedere quali attributi potrebbe avere una cartella. Inoltre, toccandolo, hai perso il timestamp originale.
Synetech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.