Versteckte Dateien / Ordner mit der Kommandozeile oder der Batch-Datei verschieben

15

Frage

Kennt jemand eine Möglichkeit zum Verschieben von Dateien und Ordnern, für die das Attribut "Versteckt", "System" oder "Schreibgeschützt" über die Befehlszeile oder eine Batchdatei festgelegt wurde? (Nein, zuerst die Attribute entfernen ist keine Option, da es keine praktische Möglichkeit gibt, festzustellen, welche Attribute festgelegt wurden, um sie nach dem Verschieben zurückzusetzen.)


(Fehlgeschlagene Versuche

  1. Die Verwendung des moveBasisbefehls funktioniert nicht mit Elementen, für die das Attribut " Versteckt" oder "System" festgelegt ist, und aus irgendeinem Grund sind keine Schalter zum Angeben von Attributen vorhanden, wie dies bei den Befehlen dirund der Fall istdel .

  2. Ich habe versucht, ein von mir geschriebenes Dienstprogramm zu verwenden, das die Dateioperationsfunktion der Shell verwendet, für das jedoch die Verwendung start /wvon erforderlich ist, um zu verhindern, dass die Batchdatei im Voraus ausgeführt wird, und das sich aus irgendeinem Grund über die Unterstützung langer Dateinamen beschwert.

  3. Ich habe versucht , mit robocopy, aber es zunächst kopiert die Dateien und löscht dann die Originale , anstatt einfach zu bewegen , die Quelle (die Ergebnisse in einer frustrierenden Verzögerung auch bei dem übermäßige Ausgang umgeleitet nul).

(Überraschenderweise scheinen nur wenige Leute jemals versteckte Dateien von der Kommandozeile verschieben zu müssen. Alles, was ich finden konnte, war diese eine Person , die den Versuch abgebrochen hat.)

Synetech
quelle
4
Wenn Sie das \tempVerzeichnis erstellen , warum nicht einfach das %1Verzeichnis umbenennen / verschieben \temp? Oder ist das nur der vereinfachte Fall?
Ken
Das ist in der Tat ein vereinfachter Fall. Ein einfaches Umbenennen würde nicht funktionieren.
Synetech
Warum ist das Entfernen eines Attributs keine Option? Das wäre der richtige (und beabsichtigte) Weg, dies zu tun.
Rook
> Warum ist das Entfernen eines Attributs keine Option? @Idigas, wie genau würden Sie wissen, welche Attribute für jedes Element festgelegt wurden, damit sie korrekt zurückgesetzt werden können? > Das wäre der richtige (und beabsichtigte) Weg, dies zu tun. Das hört sich überhaupt nicht richtig an.
Synetech
Vergib mir meine Unwissenheit, aber würde so etwas wie jamesewelch.com/2008/05/01/… funktionieren?
Dr Kitty

Antworten:

6

Ich konnte schreibgeschützte, versteckte Dateien mithilfe von MV.EXE aus den GNU for Win32-Dienstprogrammen erfolgreich verschieben. Die Zieldatei behält die schreibgeschützten, ausgeblendeten Attribute bei.

Sie müssen das gesamte Paket herunterladen:

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

RobW
quelle
1
Nicht schlecht. Das funktioniert, leider stirbt es beim Umgang mit Dateien, die mit beginnen --; es denkt, dass es ein Argument anstelle eines Dateinamens ist.
Synetech
2
Nicht schlecht? Das ist es? Es löst Ihre Anfrage. Ich sehe nichts über die Anforderung '--Dateiname', oder ich hätte es getestet. Entschuldigung, aber versteckte Anforderungen sind schlechter Sport.
RobW
Ja nicht schlecht. Es wird nur die grundlegende Operation ausgeführt, nach der ich gefragt habe. Wenn es keine gültigen Windows-Dateinamen verarbeiten kann, ist es jetzt nicht sehr nützlich, oder? Der richtige Umgang mit Dateinamen ist keine „versteckte“ Voraussetzung.
Synetech
3
@Synetech, Sie müssen nur den Dateinamen mv .\--1.txt newdirectory
angeben
4
Unix-Dienstprogramme werden im Allgemeinen --foozum Bezeichnen von Befehlszeilenargumenten verwendet. Um Dateinamen zu unterstützen, die mit beginnen --, akzeptieren die meisten von ihnen ein spezielles Argument --, um das Ende der Befehlszeilenargumente und den Anfang der Dateinamen zu kennzeichnen. Ich bin nicht sicher, ob mves sich um einen dieser Befehle handelt, aber wenn ja, sollten Sie in der Lage sein:mv -- --weirdFileName.gotcha betterFileName.txt
Ben
5

Ich habe dies gerade erreicht mit:

xcopy /H hidden_file destination_file
del /AH hidden_file
Ben
quelle
1
In der Frage wird gefragt, wie Dateien verschoben werden sollen. Das OP kann kopieren und löschen und will das auch nicht. Außerdem sagt er, dass er bereits weiß, wie man versteckte Dateien löscht.
Scott
2
Scott hat recht; Wenn Quell- und Zieldatenträger identisch sind, müssen Sie als Letztes eine Datei „verschieben“, indem Sie sie zuerst kopieren. Bestenfalls ist es mit einer einzelnen kleinen Datei sinnlos, aber mit einer großen Datei oder vielen kleinen Dateien (geschweige denn vielen großen Dateien) ist es schrecklich (hohe CPU- und Festplattenlast). Dies ist umso schlimmer, wenn Sie einen ganzen Verzeichnisbaum verschieben. Das Dateisystem unterstützt bereits ein schnelles und einfaches Verschieben durch Ändern der Verzeichniseintragszeiger. Das Problem liegt in der OS-Oberfläche, die dies bei versteckten Dateien verhindert.
Synetech
Fair genug, es ist kein wirklicher Schachzug. Und für große Bewegungen kann es viel Overhead geben. Das OP hat jedoch nie behauptet, dass das Kopieren und Löschen unbedingt eine schlechte Sache sei, und dies ist einer der Top-Treffer bei der Websuche nach versteckten Dateien über die Befehlszeile . Ich stelle mir vor, dass Leute, die nur nach dem Verschieben einiger versteckter Dateien suchen, diese auch verwenden könnten, anstatt GNU-Tools oder PowerShell zu installieren. Sehr ärgerlich, dass der Befehl "Verschieben" dies einfach nicht kann.
Ben
1
Von der Frage: „ (Fehlgeschlagen) Versuche , ... 3. Ich habe versucht , mit robocopy, aber es zunächst kopiert die Dateien und löscht dann die Originale , anstatt einfach zu bewegen , die Quelle (die Ergebnisse in einer frustrierenden Verzögerung, ...).“
Scott
Fair genug ... Ich glaube, ich habe gelesen, dass "Ich möchte keine Robokopie verwenden" statt "Ich möchte keine Kopier- und Löschoperation". Aber ich verstehe deinen Standpunkt.
Ben
3

Powershell v2:

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

Verschiebt auch versteckte Dateien mit versteckten und festgelegten Systemattributen. Funktioniert mit Dateien, die mit '-' beginnen.

RobW
quelle
1
Ich bin mir sicher, dass das funktionieren würde, aber PowerShell ist im Vergleich zur normalen Eingabeaufforderung unglaublich langsam. Und nein, das ist keine „versteckte“ Anforderung, ich habe in der Frage deutlich meine Abneigung gegen die Verzögerung von Robocopy zum Ausdruck gebracht. (Bitte sagen Sie mir nicht, dass es auf Ihrem System schnell funktioniert, da es mir in keiner Weise hilft. Auf meinem System dauert es einige Sekunden, bis es geladen ist, und selbst das Drücken Tab, um einen Dateinamen zu vervollständigen, dauert> 1 Sekunde, was in Ordnung ist eine Größenordnung langsamer als in cmd. Also , wenn Sie bereit sind , mir ein neues System zu kaufen, dann ist PS geht nicht zu Hilfe).
Synetech
Noch einfachere PowerShell-Lösung:mv .oldfile .newfile
Jay Sullivan
0

Wie wäre es damit?

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
quelle
Offensichtlich funktioniert dies nur innerhalb der Einschränkungen, in denen Hardlinks zulässig sind. Ich denke, dies bedeutet, dass sich das Ziel der Datei auf derselben Partition auf derselben physischen Festplatte befinden muss. Aber wenn diese Einschränkung nicht erfüllt wird, wäre ein Kopieren + Löschen unter der Haube ohnehin ziemlich sicher erforderlich.
Ben
Interessante Idee. Natürlich ist es zu begrenzt (ich verwende nur NTFS für das Windows 7-Systemlaufwerk und FAT32 für alles andere. Außerdem verwende ich normalerweise Windows XP.) Es scheint auch inkonsistent mit verschiedenen Attributkombinationen zu funktionieren. Wenn Sie beispielsweise das schreibgeschützte Attribut festlegen, können Sie die "neue" Datei nicht löschen, wenn Sie zum ersten Mal versuchen, sie zu löschen, sondern das Attribut wird entfernt. ಠ_ ఠ Und natürlich funktioniert es nicht für Ordner.
Synetech
0

Wir hatten PowerShell und den mvBefehl. Der Vollständigkeit halber lesen Sie hier, wie dies mit dem TCC / LE von JP Software gemacht wird , dessen Befehle moveund reneine /a:Option enthalten, die vielen Befehlen gemeinsam ist, mit denen Verzeichnisse nach Dateien durchsucht werden, auf die gearbeitet werden soll:

[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 Datei verschoben

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

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

[C: \ Users \ JdeBP]

Weitere Lektüre

  • JP Software. BEWEGEN . Nehmen Sie die Command / TCC-Hilfe in Anspruch.
  • JP Software. REN . Nehmen Sie die Command / TCC-Hilfe in Anspruch.
JdeBP
quelle
Ich für meinen Teil bin nicht im Begriff, eine kommerzielle Software zu kaufen, um mit einem kleinen, kostenlosen Programm das zu tun, was ich tun sollte (und ich muss es möglicherweise wie gewohnt selbst schreiben). Unabhängig davon haben Sie die Attribute fest codiert, was nicht gut ist, da Sie nicht vorhersagen können, welche Attribute ein Ordner haben kann. Außerdem haben Sie durch Berühren den ursprünglichen Zeitstempel verloren.
Synetech