Переміщення прихованих файлів / папок за допомогою командного рядка або пакетного файлу


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
Непогано? Це воно? Це вирішує ваш запит. Я нічого не бачу щодо вимоги '--namename', або я би перевірив її. Вибачення, але приховані вимоги - поганий вид спорту.
RobW

Так, непогано. Це лише основна операція, про яку я запитав. Якщо він не може обробити дійсні імена файлів Windows, то це зараз не дуже корисно? Правильне поводження з іменами файлів не є “прихованою” вимогою.
Synetech

3
@Synetech, ви просто повинні визначити ім'я файлу:mv .\--1.txt newdirectory
dangph

4
Утиліти Unix в цілому використовують --fooдля позначення аргументів командного рядка. Для підтримки імен файлів, починаючи з цього --, більшість з них приймає спеціальний аргумент --для позначення кінця аргументів командного рядка та початку імен файлів. Я не впевнений, чи mvє одна з цих команд, але якщо вона є, то ви повинні мати можливість:mv -- --weirdFileName.gotcha betterFileName.txt
Бен

5

Я щойно це здійснив, використовуючи:

xcopy /H hidden_file destination_file
del /AH hidden_file

1
Питання задає питання про те, як переміщувати файли. ОП знає, як скопіювати та видалити, і не хоче цього робити. Також він каже, що вже знає, як видалити приховані файли.
Скотт

2
Скотт правильний; якщо джерела та томи призначення однакові, останнє, що ви хочете зробити, - це "перемістити" файл, скопіювавши його спочатку. У кращому випадку безглуздо з одним невеликим файлом, але з великим файлом або безліччю невеликих файлів (не кажучи вже про багато великих файлів) це жахливо (висока завантаження процесора та диска). Це стає ще гірше, якщо ви переміщуєте ціле дерево каталогів. Файлова система вже підтримує швидкий і простий хід, змінюючи покажчики введення каталогу; проблема полягає в інтерфейсі ОС, який заважає робити це прихованими файлами.
Synetech

Досить справедливо, це не справжній хід. А для великих рухів це може дати багато накладних витрат. Але ОП ніколи насправді не казав, що копія + видалення - це обов'язково погана річ, і незалежно, це одне з найкращих звернень у веб-пошуку, як перемістити прихований файл з командного рядка, і він працював на те, що мені довелося робити . Я думаю, що люди просто шукають, як перемістити кілька прихованих файлів, а також використовуватимуть їх замість установки інструментів GNU або PowerShell. Дуже дратує, що команда "переміщення" просто не може цього зробити.
Бен

1
З питання: " (Не вдалося) Спроби ... 3. Я спробував використовувати robocopy, але він спершу копіює файли, а потім видаляє оригінали, а не просто переміщувати джерело (що призводить до розчарування затримки, ...)".
Скотт

Досить справедливо ... Я думаю, я читав це як "я не хочу використовувати роботокопію" замість "я не хочу операції копіювання + видалення". Але я бачу вашу думку.
Бен

3

Powershell v2:

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

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


1
Я впевнений, що це спрацює, але PowerShell болісно повільно порівняно зі звичайною командною командою. І ні, це не "прихована" вимога, я чітко вказав на свою неприязнь до затримки роботи "Робокопія". (Будь ласка, не кажіть мені, що вона працює швидко у вашій системі, тому що це мені ніяк не допомагає. На моїй системі потрібно кілька секунд просто завантажити, і навіть просто натискання 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команда. Для повноти, ось ось, як це зробити з TCC / LE програмного забезпечення JP Software , у яких moveі renобидва команди мають /a:параметр, який є загальним для багатьох його команд, які сканують каталоги на файли, на яких можна працювати:

[C: \ Користувачі \ JdeBP] touch / c - wibble--
03.03.2014 20: 29: 18,868 С: \ Користувачі \ JdeBP \ - wibble--

[C: \ Users \ JdeBP] attrib + h + s. \ - wibble--
___A___________ -> _HSA___________ C: \ Користувачі \ JdeBP \ - wibble--

[C: \ Користувачі \ JdeBP] переміщення / a: hs --wibble-- --wobble--
C: \ Користувачі \ JdeBP \ - wibble-- -> C: \ Користувачі \ JdeBP \ - коливання--
     1 файл переміщено

[C: \ Користувачі \ JdeBP] ren / a: hs --wobble-- --wurble--
C: \ Користувачі \ JdeBP \ - коливання-- -> C: \ Користувачі \ JdeBP \ - wurble--
     1 файл перейменований

C: \ Користувачі \ JdeBP] dir / a: hs / t / m / k - wurble--
03.11.2014 20:29 0 _HSA___________ - wurble--

[C: \ Користувачі \ JdeBP]

Подальше читання

  • Програмне забезпечення JP. ПОВЕРНУТИСЯ . Візьміть довідку Command / TCC.
  • Програмне забезпечення JP. РЕН . Візьміть довідку Command / TCC.

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