1 (изменено: Ремер, 2012-05-03 19:25:42)

Тема: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Задача: из папки C:\Documents and Settings\%USERNAME%\Local Settings\Temp скопировать файл, имя случайное, расширение .tmp, скрытый, в папку D:\Test. Снять атрибут скрытый, и переименовать в Setup.exe. Вот что набросал:

@echo off
del d:\Test /q
md d:\Test
xcopy /q /h "C:\Documents and Settings\%USERNAME%\Local Settings\Temp\*.tmp" "d:\Test"
attrib -h d:\Test\*.*
rename d:\Test\*.* Setup.exe
start "" "d:\Test"

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

2

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Как-то так (не проверялось):

@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%i in ('dir /b /a:h "%Temp%\*.tmp"') do if not defined sFileName set sFileName=%%i

if defined sFileName (
    copy /y "%Temp%\%sFileName%" "D:\Test\"
    attrib.exe -h "D:\Test\%sFileName%"
    ren "D:\Test\%sFileName%" "Setup.exe"
)

endlocal
exit /b 0

Копируем первый подходящий файл.

3

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

К сожалению не работает, не успеваю увидеть сообщение, но похоже не находит файла.

4

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Ремер, запускайте пакетные файлы из командной строки — увидите.

5 (изменено: Ремер, 2012-05-07 22:14:55)

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Выводит сообщение: Не удается найти указанный файл.
                                Не найден путь: D:\Test
                                Не удается найти указанный файл.

6

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Ремер, ясно. Давайте по порядку:

1. Вы используете приведённый код в неизменном виде?
2. Если — да, то что выдаёт команда:

dir /b /a:h "%Temp%\*.tmp"

в тех же условиях?

7

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Код немного редактировал, хотел узнать почему не работает. Что выводит в неизменном виде ответил выше.

8

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

В таком случае, приведите Ваш код.

9 (изменено: Ремер, 2012-05-07 22:33:24)

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

alexii пишет:

В таком случае, приведите Ваш код.

Привести то особо нечего, прописывал полный путь, пытался выполнить определенную часть кода, чтоб узнать где загвоздка. Похоже в самом начале, но понять не могу.
Выводит сообщение(код не отредактированный): Не удается найти указанный файл.
                                Не найден путь: D:\Test
                                Не удается найти указанный файл.

10

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Ремер, а если вместо этого пакетного файла исполнить в командной строке команду:

dir /b /a:h "%Temp%\*.tmp"

— что она напишет?

11

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Показала имена всех двух скрытых файлов, с расширением .tmp

12

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Такой пакетный файл:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%i in ('dir /b /a:h "%Temp%\*.tmp"') do if not defined sFileName set sFileName=%%i

if defined sFileName (
    echo %sFileName%
)

endlocal
exit /b 0

должен показать имя первого из этих двух файлов. Так?

13

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Да, показывает имя первого.

14

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

«Шарик, ты балбес». Теперь ясно, зачем Вы пытались использовать «xcopy.exe».

По условиям задачи допустимо использовать «attrib.exe» на самом временном файле?

15 (изменено: Ремер, 2012-05-07 23:46:33)

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

alexii пишет:

По условиям задачи допустимо использовать «attrib.exe» на самом временном файле?

Извиняюсь, непонял. Использовал xcopy, так как она может работать со скрытыми файлами(хотя по умолчанию нет). Файл с расширением .tmp имеющий аттрибут скрытый, на самом деле, исполняющий файл.

Дополнение: Смена атрибута ни в коем случае не должна производится в папке Temp. Тот файл должен быть неизмененым.

16

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Попробуйте так:

@echo off
setlocal enableextensions enabledelayedexpansion

for /f %%i in ('dir /b /a:h "%Temp%\*.tmp"') do if not defined sFileName set sFileName=%Temp%\%%i

if defined sFileName (
    attrib.exe -h "%sFileName%"
    copy /y "%sFileName%" "D:\Test\Setup.exe"
)
endlocal
exit /b 0

Если файл не заблокирован — должно сработать.

17 (изменено: Ремер, 2012-05-07 23:48:14)

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

"Не удается найти указанный файл". Обрати пожалуйста внимание на #15. Файл не заблокирован.

18

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Ремер пишет:

Дополнение: Смена атрибута ни в коем случае не должна производится в папке Temp. Тот файл должен быть неизмененым.

Отчего так?

19

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Дело в том что установочный файл зашифрован, но при расшифровке создается скрытый временный файл, с установочным пакетом(обычный, без шифрования). И лучше с ним никакие манипуляции не проводить. Только не думайте пожалуйста, что это связано с вирусом или трояном. Если надо, могу сообщить что за прога.

20

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Ладно, попробуйте так:

@echo off
setlocal enableextensions enabledelayedexpansion

set sDestFolder=D:\Test
set sDestFile=Setup.exe

for /f %%i in ('dir /b /a:h "%Temp%\*.tmp"') do if not defined sFileName set sSourceFile=%Temp%\%%i

if defined sSourceFile (
    if not exist "%sDestFolder%\." md "%sDestFolder%"
    >nul copy nul "%sDestFolder%\%sDestFile%"
    >nul xcopy.exe /y /h "%sSourceFile%" "%sDestFolder%\%sDestFile%"
    attrib.exe -h "%sDestFolder%\%sDestFile%"
    start "" "%sDestFolder%\%sDestFile%"
)
endlocal
exit /b 0

21

Re: CMD/BAT: Копирование только скрытых файлов из одной папки в другую

Да, все получилось. Спасибо, что помогли и потратили столько времени. Я уже думал, что ни кто не ответит, хотя может быть простой и неуклюжий код написал для решения задачи, но старался же. Еще раз благодарю.