Перемещение скрытых файлов / папок с помощью командной строки или пакетного файла

15

Вопрос

Кто-нибудь знает способ перемещения файлов и папок, которые имеют скрытый, системный или доступный только для чтения атрибут, установленный из командной строки или командного файла? (Нет, удаление атрибутов в первую очередь не вариант, так как нет практического способа узнать, какие атрибуты были установлены для того, чтобы повторно установить их после перемещения.)


(Неудачные) попытки

  1. Использование основной moveкоманды не работает с элементами с скрытыми или системным набором атрибутов и по некоторым причинам, он не имеет переключателей , чтобы указать атрибуты вроде dirи delкоманд делают.

  2. Я попытался использовать утилиту, которую я написал, которая использует функцию работы с файлом оболочки, но для этого требуется использование, start /wчтобы предотвратить запуск командного файла, и он по какой-то причине жалуется на поддержку длинных имен файлов.

  3. Я попытался использовать robocopy, но сначала он копирует файлы, а затем удаляет оригиналы, а не просто перемещает источник (что приводит к расстраивающей задержке, даже при чрезмерном перенаправлении вывода nul).

(Удивительно, но кажется, что мало кто когда-либо нуждался в перемещении скрытых файлов из командной строки. Все, что я смог найти, это один человек, который отказался от попытки.)

Synetech
источник
4
Если вы создаете \tempкаталог, почему бы просто не переименовать / переместить %1каталог в \temp? Или это просто упрощенный случай?
Кен
Это действительно упрощенный случай. Просто переименование не будет работать.
Synetech
Почему удаление атрибута не вариант? Это был бы правильный (и предполагаемый) способ сделать это.
Ладья
> Почему удаление атрибута не вариант? @Idigas, как именно вы узнаете, какие атрибуты были установлены для каждого элемента, чтобы их можно было правильно переустановить? > Это был бы правильный (и предполагаемый) способ сделать это. Это звучит неправильно, вообще.
Synetech
Прости мое невежество, но сработает ли что-то вроде jamesewelch.com/2008/05/01/… ?
Доктор Китти

Ответы:

6

Мне удалось успешно переместить скрытые файлы, доступные только для чтения, используя MV.EXE из утилит GNU для Win32. Целевой файл сохраняет скрытые атрибуты только для чтения.

Вам придется скачать весь пакет:

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

RobW
источник
1
Неплохо. Это работает, к сожалению, оно умирает при работе с файлами, которые начинаются с --; он думает, что это аргумент, а не имя файла.
Synetech
2
Неплохо? Это оно? Это решает ваш запрос. Я не вижу ничего о требовании --filename, иначе я бы проверил его. Извинения, но скрытые требования - плохой спорт.
RobW
Да не плохо Это только основная операция, о которой я спрашивал. Если он не может обрабатывать правильные имена файлов Windows, то это не очень полезно сейчас, не так ли? Правильная обработка имен файлов не является «скрытым» требованием.
Synetech
3
@ Synetech, вам просто нужно mv .\--1.txt newdirectory
указать
4
Утилиты Unix обычно используются --fooдля обозначения аргументов командной строки. Для поддержки имен файлов, начинающихся с --, большинство из них принимает специальный аргумент, --обозначающий конец аргументов командной строки и начало имен файлов. Я не уверен, mvявляется ли одна из этих команд, но если это так, то вы должны быть в состоянии:mv -- --weirdFileName.gotcha betterFileName.txt
Бен
4

Я только что сделал это, используя:

xcopy /H hidden_file destination_file
del /AH hidden_file
Бен
источник
1
Вопрос спрашивает, как переместить файлы. ОП знает, как копировать и удалять, и не хочет этого делать. Также он говорит, что уже знает, как удалить скрытые файлы.
Скотт
2
Скотт прав; если исходный и целевой тома одинаковы, последнее, что вы хотите сделать, это «переместить» файл, скопировав его первым. В лучшем случае это бессмысленно с одним маленьким файлом, но с большим файлом или большим количеством маленьких файлов (не говоря уже о многих больших файлах), это ужасно (высокая загрузка ЦП и диска). Это становится еще хуже, если вы перемещаете целое дерево каталогов. Файловая система уже поддерживает быстрое и простое перемещение, изменяя указатели записей каталога; проблема в интерфейсе ОС, который не позволяет делать это со скрытыми файлами.
Synetech
Справедливо, это не настоящий шаг. И для больших движений это может дать много накладных расходов. Но ОП никогда не говорил, что копирование + удаление - это обязательно плохо, и, тем не менее, это один из главных хитов в веб-поиске, как переместить скрытый файл из командной строки, и это сработало для того, что я должен был сделать , Я полагаю, что люди, которые просто ищут, как переместить несколько скрытых файлов, могут использовать его вместо установки инструментов GNU или PowerShell. Очень досадно, что команда «переместить» просто не может этого сделать.
Бен
1
Из вопроса: « (Неудачные) попытки … 3. Я пытался использовать robocopy, но сначала он копирует файлы, а затем удаляет оригиналы вместо простого перемещения источника (что приводит к расстраивающей задержке…)».
Скотт
Достаточно справедливо ... Я думаю, что я прочитал это как "Я не хочу использовать robocopy" вместо "Я не хочу операцию копирования + удаления". Но я понимаю вашу точку зрения.
Бен
3

Powershell v2:

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

также перемещает скрытые файлы с установленными скрытыми и системными атрибутами. Будет работать с файлами, начинающимися с '-'.

RobW
источник
1
Я уверен, что это сработает, но PowerShell мучительно медленен по сравнению с обычной командной строкой. И нет, это не «скрытое» требование, я четко обозначил свою неприязнь к задержке Robocopy в этом вопросе. (Пожалуйста, не говорите мне, что это работает быстро в вашей системе, потому что это никак не помогает мне. В моей системе загрузка занимает несколько секунд, и даже простое нажатие Tabдля завершения имени файла занимает> 1 секунду, что является порядком медленнее, чем в cmd. Так что, если вы не готовы купить мне новую систему, то PS не поможет.)
Synetech
Еще более простое решение PowerShell:mv .oldfile .newfile
Джей Салливан,
0

Как насчет этого?

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
Бен
источник
Очевидно, что это работает только в рамках ограничений, где разрешены жесткие ссылки. Я думаю, что это означает, что место назначения файла должно быть в том же разделе того же физического диска. Но если это ограничение не будет соблюдено, я уверен, что в любом случае потребуется скрытое копирование + удаление.
Бен
Интересная идея. Конечно, он слишком ограничен (я использую только NTFS для системного диска Windows 7 и FAT32 для всего остального. Кроме того, я обычно использую Windows XP.) Кажется, он также несовместим с различными комбинациями атрибутов. Например, если вы установите атрибут «только для чтения», он не позволит вам удалить «новый» файл при первой попытке удалить его, вместо этого он удалит атрибут. ಠ_ ఠ И, конечно, это не работает для папок.
Synetech
0

У нас был PowerShell и mvкоманда. Для полноты картины , поэтому, вот, как сделать это с JP Software, TCC / LE , которого moveи renкоманды обоих есть /a:вариант , который является общим для многих из его команды , которые сканируют каталоги для файлов для работы на:

[C: \ Users \ JdeBP] touch / c --wibble--
03.11.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 файл перемещен

[C: \ Users \ JdeBP] ren / a: hs --wobble-- --wurble--
C: \ Users \ JdeBP \ - wobble-- -> C: \ Users \ JdeBP \ - wurble--
     1 файл переименован

C: \ Users \ JdeBP] dir / a: hs / t / m / k --wurble--
03.11.2014 20:29 0 _HSA___________ - Вурбул--

[C: \ Users \ JdeBP]

дальнейшее чтение

  • JP Software. ДВИЖЕНИЕ . Возьмите Command / TCC Help.
  • JP Software. РЕН . Возьмите Command / TCC Help.
JdeBP
источник
Я, например, не собираюсь покупать коммерческое программное обеспечение, чтобы делать то, что я должен делать с небольшой бесплатной программой (и я вполне могу в конечном итоге написать его сам, как обычно). В любом случае, вы жестко закодировали атрибуты, что не годится, потому что вы не можете предсказать, какие атрибуты могут иметь папка. Кроме того, прикоснувшись к нему, вы потеряли его первоначальную метку времени.
Synetech