Войти

Показать полную графическую версию : Перемещение нескольких папок из папки E2E2~1


ameds
11-06-2010, 17:52
Вирус, на флешке, создает специальную папку в виде .. (две точки) и помещает в эту папку все папки, которые находяться в корне флешки и затем в корне, создает exe-файлы в виде "названия_перемещенной_папки.exe". Exe-файлы удаляет любой антивирус, а оригинальные папки не восстаналивает.

Попасть во внутрь папки .. через проводник нет возможности. Но можно решить проблему введя в командной строке:
cd \E2E2~1
и затем переместить все папки на уровень выше.

Последнее время очень много народу обращается с проблемой пропажи папок и потому хотелось бы как то автоматизировать эту работу, что бы, каждый раз не проделывать всю работу в ручную, то есть создать свой батник при запуске которого восстаналвивались бы все папки а папка "E2E2~1" удалялась.

NiOl
11-06-2010, 20:08
@Echo off
SetLocal EnableExtensions
set Disks=D E F G H I J K L M N O P Q R S T U V W X Y Z
set Home=%CD%

echo Ищем диски с каталогом ".." в корне...
for %%D in (%Disks%) do if exist %%D:\E2E2~1 call :Found %%D:\E2E2~1
if not defined WD (
msg * /time:5 "Каталог [..] не обнаружен"
exit 2
)
cd %Home%
%Home:~0,2%
exit


:Found
set WD=%1
cd %WD%
%WD:~0,2%

echo.
echo Удаляем все *.EXE из корня [%WD:~0,2%]
del /f ..\*.exe 2>nul

echo Восстанавливаем структуру каталогов [%WD:~0,2%]
xcopy *.* \*.* /E /C /I /H /T /Y

echo Переносим файлы...
move *.* \ 2>nul
for /f "tokens=* delims=" %%P in ('dir /ad /b /s *.*') do call :Proceed "%%P"
rem Все ли файлы перенесены?
for /f "tokens=* delims=" %%L in ('dir /a-d /b /s *.* 2^>nul ^| find /c ":"') do set Lines=%%L
if %Lines%==0 (cd .. & rd /s /q E2E2~1 & echo Удаляем каталог) else msg * "Не все файлы из [%WD%] удалось перенести (%Lines% шт)"
exit /b


:Proceed
set Pth=%~1\
set Pth=%Pth:~10,-1%
move "%Pth%\*.*" "\%Pth%" 2>nul
exit /b
ЗЫ: НЕ ИМЕЯ СВОБОДНОГО НОСИТЕЛЯ (И ТЕМ БОЛЕЕ ЗАРАЖЕННОГО ЭТИМ СОРТОМ ВИРУСА) НЕ СМОГ ПОЛНОЦЕННО ПРОТЕСТИРОВАТЬ СКРИПТ! ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК!!!

ЗЗЫ: Бежит по всем дискам, начиная с [D:] и ищет там указанный каталог. Предполагаю, что если флешка оформатирована под NTFS, то указанного каталога там не будет...

ameds
16-06-2010, 17:18
Протестировал Ваш скрип.
Файлы и каталоги успешно переноситься из папки E2E2~1 на уровень выше. Сама папка E2E2~1 по окончанию не удаляется, в связи с этим уменьшается размер свободного места на флешке, так как папки дублируются.
p.s. тестировала на WinXP

NiOl
17-06-2010, 13:49
Сама папка E2E2~1 по окончанию не удаляется »

т.е. Выскакивает сообщение "Не все файлы из [...] удалось перенести (... шт)" или отловлен "глюк"?

El Sanchez
18-06-2010, 20:23
ameds, не пора ли начать искать вирус?

P.S. http://wiki.drweb.com/index.php/Каталог_E2E2~1

ameds
19-06-2010, 18:35
El Sanchez вирус найден и удален, но каталог и файлы в нем остались.

NiOl появляется сообщение "Не все файлы из [...] удалось перенести (... шт)".

NiOl
19-06-2010, 22:42
ameds, возможно к ним не было доступа. Попробуйте сбросить аттрибуты RO/Hiden/System и еще раз запустить скрипт.
А так, если не секрет - там всего несколько файлов не переехало назад или все? Если все, то боюсь мой скрипт где-то глючит - я тогда попрошу Вас скинуть архив с теми файлами, что не представляют секрета - посмотреть на проблему по-подробнее.

ameds
20-06-2010, 13:56
NiOl, скидывать файлы не имеет смысла, так как файлы я создавал сам для теста, обыкновенные, пустые txt-шники. Тоже самое и с папками + в них несколько тоже пустых файлов. При выполнении скрипта, txt из корня папки E2E2~1, перемещаются, то есть в папке E2E2~1 их не остается, а вот папки из этой папки (простите за тавтологию ) только копируются.

По совету друга, смог удалить папку следующим способом:
RD \\.\G:\E2E2~1 /s

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

Можно ли это как то учесть в скрипте??

p.s. удалил у себя последний экземпляр папки E2E2~1, протестировать смогу только когда кто нить опять принесет фешку с этой папкой.

NiOl
21-06-2010, 16:17
ameds,
1. про запись "\\.\" слышу впервые, команды едят ее нормально, не ругаются
2. разницы по исполнению rd /s /q E2E2~1 и rd /s /q \\.\%WD:~0,2%\E2E2~1 не обнаружил - обе команды исправно удалили каталог с атрибутами SHR
3. попробуйте после строки echo Переносим файлы... вписать строку attrib *.* /s /d -s -h -r

И ГЛАВНОЕ: Если Вы получили всплывающее окошко "Не все файлы из [disk:] удалось перенести (xxx шт)" - каталог уничтожить легко, но этого ни в коем случае не делается, т.к. файлы в нем не перенесены!!! т.к. они не копируются, а переносятся. Именно поэтому я и спросил - неперенеслись ВСЕ файлы или только ЧАСТЬ?

El Sanchez
22-06-2010, 16:46
Он рекомендовал обратить внимание на \\.\ сказал, что с помощью этого можно удалять системные папки (или что то в этом духе). В интернете не смог ничего найти по этому поводу, google отказывается искать. »

про запись "\\.\" слышу впервые, команды едят ее нормально, не ругаются »

ameds, NiOl,

Префикс \\.\, как и \\?\, позволяет производить операции с файлами, в названии которых содержатся зарезервированные имена, такие как LPT1, COM1, PRN, на NTFS-разделах, и через Проводник их не создашь и не убьешь. Поэтому либо через CMD с дописыванием префикса, либо через юникодный Far.

Iska
22-06-2010, 17:57
Всё же есть разница, и разница достаточно существенная:
Path (computing) - Wikipedia, the free encyclopedia (http://en.wikipedia.org/wiki/Path_(computing)#MS-DOS.2FMicrosoft_Windows_style)
Naming Files, Paths, and Namespaces (Windows) (http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx)
Naming a Volume (Windows) (http://msdn.microsoft.com/en-us/library/aa365248(v=VS.85).aspx)

For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs.

Because it turns off automatic expansion of the path string, the "\\?\" prefix also allows the use of ".." and "." in the path names, which can be useful if you are attempting to perform operations on a file with these otherwise reserved relative path specifiers as part of the fully qualified path.

The "\\.\" prefix will access the Win32 device namespace instead of the Win32 file namespace. This is how access to physical disks and volumes is accomplished directly, without going through the file system, if the API supports this type of access. You can access many devices other than disks this way (using the CreateFile and DefineDosDevice functions, for example).

Another example of using the Win32 device namespace is using the CreateFile function with "\\.\PhysicalDiskX" (where X is a valid integer value) or "\\.\CdRomX". This allows you to access those devices directly, bypassing the file system. This works because these device names are created by the system as these devices are enumerated, and some drivers will also create other aliases in the system. For example, the device driver that implements the name "C:\" has its own namespace that also happens to be the file system.

P.S. Достаточно и «старого», 1.75, Far'а ;):

╔═════════════════════════════ Редактор ═════════════════════════════╗
║ Редактировать файл: ║
║ \\?\Volume{2e024072-e4a1-11dd-a054-806d6172696f}\lpt1 ║
╟────────────────────────────────────────────────────────────────────╢
║ { Продолжить } [ Отменить ] ║
╚════════════════════════════════════════════════════════════════════╝

El Sanchez
23-06-2010, 10:40
Iska, вторая ссылка хороша, я же просмотрел лишь следующие статьи:

http://support.microsoft.com/kb/320081/ru
http://support.microsoft.com/kb/315226/

Будем считать, что оба префикса существуют для обхода ограничений ОС - \\?\ для обхода лимита значения MAX_PATH, \\.\ для обхода запрета операций с файлами с зарезервированными именами.

З.Ы. Под рукой у меня был только юникодный Far :)

Iska
23-06-2010, 17:27
El Sanchez, спасибо за ссылки, полезная информация; даёт хорошие (и реальные) примеры применения данной технологии. «\\?\» для «обхода запрета операций с файлами с зарезервированными именами» годится тоже.

P.S. Одно время была оживлённая дискуссия на Far'овском форуме — нужно ли наделять Far интеллектом, дабы он не позволял манипулировать такими именами… К счастью, решили этого не делать и оставили такую возможность. А по созданию подобных имён в 2.0, Вы правы, возможностей действительно больше (http://bugs.farmanager.com/view.php?id=953#c3658).




© OSzone.net 2001-2012