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


15

Вопрос

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


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

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

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

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

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


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


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

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


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.

Я, например, не собираюсь покупать коммерческое программное обеспечение, чтобы делать то, что я должен делать с небольшой бесплатной программой (и я вполне могу в конечном итоге написать его сам, как обычно). В любом случае, вы жестко закодировали атрибуты, что не годится, потому что вы не можете предсказать, какие атрибуты могут иметь папка. Кроме того, прикоснувшись к нему, вы потеряли его первоначальную метку времени.
— Synetech
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.