Показать полную графическую версию : [решено] Создание txt файла при добавлении файла в архив rar, немного дополнить скрипт
ndrjjzbv
28-08-2017, 20:02
Скрипт архивирует файлы с расширением *.psd и *.jpg
@echo off
chcp 1251
for /f "tokens=2 delims==:" %%i in ('
wmic logicaldisk get Name /value
') do (
for /f "delims=" %%j in ('
dir /a-d /b /s %%i:\*.psd %%i:\*.JPG 2^>nul
') do (
"%PROGRAMFILES%\WinRAR\Rar.exe" a -y -ri15 -dr -m0 -inul "%%~dpnj.rar" "%%j"
)
)
exit /b
Подскажите, как дополнить скрипт, что бы:
- после архивирования, во всех папках где созданы архивы, создавался файл name.txt в единственном числе, а при наличии данного файла заменялся новым.
- в созданном файле присутствовал текст в несколько строк
text
text
text
Необходимо новое дополнение:
- что бы при запуске скрипта, он не архивировал файлы с нужным расширением, если в пути к данному файлу имеется папки с именами - пример name1, name2, name3 (проще говоря, что бы скрипт не залазил в данные папки)
...
') do (
pushd "%%~dpj"
>"name.txt" (
echo text
echo text
echo text
)
popd
"%PROGRAMFILES%\WinRAR\Rar.exe" a -y -ri15 -dr -m0 -inul "%%~dpnj.rar" "%%j"
)
...
для начала ...
вообще нужно объяснить что это за файл, для чего (какую роль выполняет) он, почему уже может быть такой, откуда тот берется
скорее всего весь код надо видоизменить к этому условию, но надо точно понимать задачу.
ndrjjzbv
29-08-2017, 13:42
alpap спасибо
Добавил ваш код в свой, все работает, как и требовалось.
Пример: Существует много папок с начальными проектами для работы с фотографией. В настоящее время данный файл создается вручную в каждом проекте (папке) и содержит технические комментарии по проекту. В старых проектах данный файл уже существует, а в новые его еще требуется добавить. Комментарии в проекте всегда одинаковые, разные только изображения. Проекты отправляются разным людям, что бы те выполняли работу в соответствии с комментариями к проекту.
Благодаря вам теперь это возможно в автоматическом режиме, и не придется постоянно копировать файл в разные папки.
megaloman
30-08-2017, 13:03
ndrjjzbv, имхо, здесь ошибка, надо: dir /a-d /b /s %%i:\*.psd %%i:\*.JPG 2^>nul
ndrjjzbv
31-08-2017, 01:10
ndrjjzbv, имхо, здесь ошибка, надо:
Код:
dir /a-d /b /s %%i:\*.psd %%i:\*.JPG 2^>nul »
Подскажите для расширения кругозора, что это дает? вроде и так работает
Если не затруднит, подскажите по выше изложенному скрипту.
Как его дополнить, что бы при запуске скрипта, он не архивировал файлы с нужным расширением, если в пути к данному файлу имеется папки с именами - name1, name2, name3.
ndrjjzbv,
вроде и так работает »
создайте в корне диска "C:\" файл (или несколько) - txt и файл (или несколько) - docx
теперь создайте и запустите bat на рабочем столе с кодом:
@echo off
dir /a-d/b "c:\*.txt" "*.docx"
pause
файл с расширением docx не будет найден, о чем скажет cmd
а теперь измените код на:
@echo off
dir /a-d/b "c:\*.txt" "c:\*.docx"
pause
теперь все указанные файлы будут найдены.
без буквы диска (или директории) подставляется текущий (текущая директория - запуска)
для проверки создайте теперь на рабочем столе файл с расширением docx и запустите первый код - будут найдены соответствующие файлы.
он не архивировал файл »
в 7z это ключ: (для вашего примера) -xr!name*
а для rar или такой же или надо в мануале смотреть, я им не пользуюсь просто.
ndrjjzbv
31-08-2017, 15:23
Расширенная справка по WinRAR на русском (http://winrar-download.narod.ru/html/helpswx.htm)
взял пример ключа из мануала и добавил в скрипт
-r -x*\Documents and Settings -x*\Documents and Settings\*
результат тестирования - не смотря на ключ все искомые файлы были удалены и на их месте создан файл с комментарием, в папке с батником создался архив со всеми удаленными файлами,
-r -x*\"Documents and Settings" -x*\"Documents and Settings"\*
в этом примере - в папках с искомыми файлами создан файл с комментарием, но ничего не заархивировалось и не удалено.
ndrjjzbv,
тогда так отсейте ненужные пути и в команду поставьте архивацию
@echo on
for /f "delims=" %%a in ('dir /a-d/b/s "papka\*.txt"^|findstr /v name.*') do echo %%a
pause
megaloman
31-08-2017, 15:54
ndrjjzbv, @Echo Off
Cls
Set "Mask=*.psd *.jpg"
Set "Fcomment=name.txt"
GoTo :Begin
:Comment
Echo %Date% %Time%
Echo текст 1
Echo текст 2
Echo текст 3
Echo текст 4
GoTo :Eof
:Exclude
Echo \папка 1\
Echo \папка 2\
Echo \папка 3\
GoTo :Eof
:Begin
Set "Exc=A:\%~n0.txt"
Subst A: /D >nul 2>&1
FOR /F "usebackq tokens=1* delims=: " %%i IN (`fsutil fsinfo drives`) DO Set "DiskName=%%j"
Subst A: "%Tmp%" || (Echo Disk A: not created &Pause &GoTo :Eof)
>"%Exc%" Echo A:\
>>"%Exc%" Call :Exclude
rem Set "DiskName=D:\ E:\"
Call :DiskMask %Mask%
Del "%Exc%" 2>nul
subst A: /D
GoTo :Eof
:DiskMask
For %%i IN (%DiskName%) DO (
For /F "usebackq delims=" %%f IN (`xcopy /s /l /EXCLUDE:%Exc% %%i%1 A:\ 2^>nul`) DO (
If Exist "%%f" Call :Arc "%%f"
)
)
Shift
If Not "%1"=="" GoTo :DiskMask
GoTo :Eof
:Arc
Echo %1
"%PROGRAMFILES%\WinRAR\Rar.exe" a -y -ri15 -dr -m0 -inul "%~dpn1.rar" %1
>"%~dp1%Fcomment%" Call :Comment
GoTo :Eof
ndrjjzbv
31-08-2017, 16:20
тогда так отсейте ненужные пути и в команду поставьте архивацию
@echo on
for /f "delims=" %%a in ('dir /a-d/b/s "papka\*.txt"^|findstr /v name.*') do echo %%a
pause »
Подскажите в какое место кода нужно внести данное дополнение?
Правильно ли я понимаю, что
findstr /v name.*
исключает из архивации файлы, в пути к которым имеется имя папки name?
papka что это за папка
"papka\*.txt"^
ndrjjzbv
31-08-2017, 16:47
megaloman
Мой вариант, предполагается, что в системе отсутствует диск A: »
батник не срабатывает, после запуска через секунду закрывается
megaloman
31-08-2017, 21:43
ndrjjzbv, Попробуйте, я подправил код. Однако! Если в именах папок-исключений кириллица - сохранять батнмк в 866 кодировке.
ndrjjzbv
31-08-2017, 22:17
Спасибо. Работает хорошо, но требуются права администратора. Возможен ли вариант для запуска без прав администратора?
ndrjjzbv,
через ярлык в котором поставить запуск с правами или задачу в планировщике с соответствующей галкой.
ndrjjzbv
01-09-2017, 15:37
добавил в код |findstr /v name1.* все работает, скрипт пропускает файлы хранящиеся в папке с именем name1 и ее подпапках
') do (
for /f "delims=" %%j in ('
dir /a-d /b /s %%i:\*.psd %%i:\*.JPG 2^|findstr /v name1.*
') do (
подскажите как добавить (перечислить) в коде несколько папок name2, name3 для исключения?
несколько папок »
findstr /v /c:"name2[0-9][0-9]*" /c:"name3[0-9][0-9]*"
как добавить (перечислить) в коде несколько папок name2, name3 для исключения? »
Через несколько шаблонов, указанных параметрами «/c», как в примере коллеги alpap.
ndrjjzbv
01-09-2017, 16:42
вероятно в коде ошибка, т.к. в перечисленных папках подобным образом
findstr /v /c:"name2[0-9][0-9]*" /c:"name3[0-9][0-9]*"
файлы все равно архивируются
добавил ключ /r все заработало
findstr /r /v /c:"name2*" /c:"name3*"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.