Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Нуль-копия папки для выкладывания на форуме.

Ответить
Настройки темы
CMD/BAT - Нуль-копия папки для выкладывания на форуме.

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491


Конфигурация

Профиль | Отправить PM | Цитировать


На этом форуме часто приходится наблюдать следующую картину. ТС пытается сформулировать свою задачу и "на пальцах" объяснить в каких папках у него находятся файлы\папки, которые ему требуется обработать соответствующим образом. Оценить структуру папок\файлов, их взаимное расположение, их имена и расширения, а также отсутствие в именах спец. символов, по такому описанию бывает крайне затруднительно. Переписка с ТС и выяснение всех деталей структуры занимает порой большую часть ветки и "напрягает" отвечающих созданием ненужных для ТС вариантов скриптов, основанных на гаданиях\предположениях.
Гораздо удобнее было бы увидеть эту структуру, но папки и файлы в них могут иметь большой размер или содержать конфиденциальную информацию. Для таких случаев удобно пользоваться нуль-копией папки\папок, в которой сохранена вся структура вложенных папок и находящихся в них файлов с сохранением их названий, но все файлы имеют нулевой размер и не содержат ни какой информации.

Предлагаю вариант скрипта для создания такой нуль-копии папки:
Код: Выделить весь код
@Echo Off
ChCp 1251>Nul
If "%~1"=="" (
	Echo The correct syntax:
	Echo %~nx0 "Full\path\to\Folder 1" ["Full\path\to\Folder 2"] ...
	Pause>Nul
	Exit
)
For /F "Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set t=%%i
Set zDT=_Zero_%t:~2,2%%t:~4,2%%t:~6,2%_%t:~8,2%-%t:~10,2%
Set f=%~1& Set cnt=2& Set c=0& Set cf=0
:_loop
	If "%f:~0,1%"=="\" Set /A cnt+=1
	Set f=%f:~1%
If Defined f GoTo _loop
Set /A cntI=cnt-1

If "%~2"=="" (
	If Exist "%~1\*" Call :_makeDir "%~1%zDT%"
	Call :_item "%~1" "%~1%zDT%" "%~1" "%cnt%" "%~1%zDT%" "%~dpn1%zDT%%~x1"
	If Exist "%~1\*" For /R "%~1%zDT%" %%f In (.) Do Set /A cf+=1
) Else (
	Call :_makeDir "%~dp1%zDT%"
	For %%i In (%*) Do Call :_item "%%~i" "%~dp1%zDT%\%%~nxi" "%~dp1%%~nxi" "%cntI%" "%~dp1%zDT%" "%~dp1%zDT%\%%~nxi"
	For /R "%~dp1%zDT%" %%f In (.) Do Set /A cf+=1
)
Echo Complete!
Echo Folders=%cf%	Files=%c%
Echo.
Pause
Exit

:_item
If Exist "%~1\*" (
	xCopy /T /E /H /K "%~1" "%~2\"|| GoTo :_err
	PushD "%~3"
	For /F "tokens=%~4* delims=\" %%a In ('Dir /S /B /A:-D') Do (
		If "%%~b"=="" (CD.>"%~5\%%~a") Else CD.>"%~5\%%~a\%%~b"
		Set /A c+=1
	)
	PopD
) Else (
	CD.>"%~6"
	Set /A c+=1
)
GoTo :EOF

:_err
For /R "%~2" %%f In (.) Do Set erf=%%f
Set erf=%erf:~0,-2%
Call Set erf=%%erf:%~2=%~1%%
RD /S /Q "%~5"
Echo Error xCopy on file:
Echo %erf%
Pause>Nul
Exit

:_makeDir
If Exist "%~1" RD /S /Q "%~1"
MD "%~1"
GoTo :EOF
После создания нуль-копии ее можно сравнить с оригиналом, на предмет отсутствия ошибок в структуре, заархивировать, и архив прикреплять к сообщению при написании ТЗ.

Рад буду услышать любую конструктивную критику и предложения по оптимизации скрипта.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:26, 12-03-2013

 

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Почему-то не получается. Где должна создаться эта нуль-папка?
мой скрипт с изменнёным путём к папке
PHP код: Выделить весь код

@Echo Off

ChCp 1251
>Nul
If "%~1"=="" (
    Echo 
The correct syntax:
    Echo %~
nx0 "e:\Проекты\Сжатие\DV"
    
Pause>Nul
    
Exit
)
For /
"Tokens=1 Delims=." %%i In ('WMIC OS Get LocalDateTime^|Find "."') Do Set t=%%i
Set zDT
=_Zero_%t:~2,2%%t:~4,2%%t:~6,2%_%t:~8,2%-%t:~10,2%
Set f=%~1Set cnt=2Set c=0Set cf=0
:_loop
    
If "%f:~0,1%"=="\" Set /A cnt+=1
    Set f=%f:~1%
If Defined f GoTo _loop
Set /A cntI=cnt-1

If "
%~2"=="" (
    If Exist "
%~1*" Call :_makeDir "%~1%zDT%"
    Call :_item "
%~1" "%~1%zDT%" "%~1" "%cnt%" "%~1%zDT%" "%~dpn1%zDT%%~x1"
    If Exist "
%~1*" For /R "%~1%zDT%" %%f In (.) Do Set /A cf+=1
) Else (
    Call :_makeDir "
%~dp1%zDT%"
    For %%i In (%*) Do Call :_item "
%%~i" "%~dp1%zDT%%%~nxi" "%~dp1%%~nxi" "%cntI%" "%~dp1%zDT%" "%~dp1%zDT%%%~nxi"
    For /R "
%~dp1%zDT%" %%f In (.) Do Set /A cf+=1
)
Echo Complete!
Echo Folders=%cf%    Files=%c%
Echo.
Pause
Exit

:_item
If Exist "
%~1*" (
    xCopy /T /E /H /K "
%~1" "%~2"|| GoTo :_err
    PushD "
%~3"
    For /F "
tokens=%~4delims=" %%a In ('Dir /S /B /A:-D') Do (
        If "
%%~b"=="" (CD.>"%~5%%~a") Else CD.>"%~5%%~a%%~b"
        Set /A c+=1
    )
    PopD
) Else (
    CD.>"
%~6"
    Set /A c+=1
)
GoTo :EOF

:_err
For /R "
%~2" %%f In (.) Do Set erf=%%f
Set erf=%erf:~0,-2%
Call Set erf=%%erf:%~2=%~1%%
RD /S /Q "
%~5"
Echo Error xCopy on file:
Echo %erf%
Pause>Nul
Exit

:_makeDir
If Exist "
%~1" RD /S /Q "%~1"
MD "
%~1"
GoTo :EOF 


Отправлено: 12:28, 28-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата IntuitOS:
Где должна создаться эта нуль-папка?
мой скрипт с изменнёным путём к папке »
Нуль-копия папки создается рядом с исходной с добавление к имени суффикса _Zero_yyMMdd_HH-mm
Править скрипт не надо. Нужно его запустить с параметром в качестве которого нужно указать полный путь к папке, которую нужно обработать, заключенного в кавычки.
Пример:
Код: Выделить весь код
ZeroCopy.bat "E:\Temp\путь к Вашей папке"
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:37, 28-03-2013 | #3


(*.*)


Administrator


Сообщения: 36471
Благодарности: 6669

Профиль | Сайт | Отправить PM | Цитировать


gora, надо, чтобы люди клали скрипт в папку - это избавит от вопросов^^

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 09:11, 29-03-2013 | #4


Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Цитата Vadikan:
клали скрипт в папку »
Скрипт может делать нуль-копию не одной папки, а сразу нескольких расположенных по разным путям. Кроме папок ему можно передать пути к файлам или комбинации путей папок\файлов.

А для совсем простого использования этого функционала у меня есть такая же опция в SetTools. Там просто выделяются нужные объекты и нажимается пункт в контекстном меню.

Отправлено: 09:16, 29-03-2013 | #5


(*.*)


Administrator


Сообщения: 36471
Благодарности: 6669

Профиль | Сайт | Отправить PM | Цитировать


gora, ок, тогда в шапке понятно объясните это тем, кто будет послан сюда

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 12:52, 29-03-2013 | #6


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


А если имена файлов в обрабатываемой папке на китайском языке, как тогда быть?

Отправлено: 19:54, 05-12-2013 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Нуль-копия папки для выкладывания на форуме.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Нуль-модемный кабель truvo Хочу все знать 20 21-12-2011 14:20
Использование - Копия Windows, выполняемая на этом компьютере, не прошла проверку на подлинность. IlyaGulya Лицензирование продуктов Microsoft 0 12-06-2010 06:27
Разное - com порт в ноутбуке, нуль-модем, PCI EXPRESS Vyacheslavfk Прочее железо 41 17-10-2008 13:51
Нуль-модемный кабель Guest Сетевые технологии 2 23-08-2004 19:47
Нуль модем Roman Go Хочу все знать 4 30-11-2002 01:19




 
Переход