IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Руководство для новичков (http://www.imho.ws/forumdisplay.php?f=35)
-   -   Кодинг в batch (http://www.imho.ws/showthread.php?t=82935)

Псих 31.03.2005 18:24

Кодинг в batch
 
Заранее сори если не там где нужно разместил тему, просто не могу определить где ее надо постить ;)

Итак.. кто-нить знает, где взять полный список команд, которые используются в *.bat файлах для скриптов?
Или может какие-то хелпы по созданию скриптов?

CH3ST 31.03.2005 19:02

Недавно себе в тхт закинул:

Цитата:

ASSOC - Отображает или модифицирует связи расширений файлов
AT - Планирует команды и программы для выполнения на компьютере.
ATTRIB - Отображает или изменяет атрибуты файла.
BREAK - Устанавливает или отменяет проверку комбинации [Ctrl+C].
CACLS - Отображает или модифицирует списки управления доступом (ACLs) для файлов.
CALL - Вызывает один *.BAT-файл из другого.
CD - Отображает имя или изменяет имя текущей директории.
CHCP - Отображает или устанавливает номер активной кодовой страницы.
CHDIR - Отображает имя или изменяет имя текущей директории.
CHKDSK - Проверяет диск и отображает отчет о состоянии.
CLS - Очищает экран.
CMD - Стартует новый экземпляр интерпретатора команд Windows NT.
COLOR - Устанавливает цвета по умолчанию для переднего и заднего плана консоли.
COMMAND - Стартует новую копию интерпретатора команд Windows.
COMP - Сравнивает содержимое двух файлов или установки файлов.
COMPACT - Отображает или видоизменяет сжатие файлов на патрициях Windows NT(NTFS).
CONVERT - Конвертирует FAT томов к формату файловой системы Windows NT(NTFS). Вы не можете конвертировать текущий диск.
COPY - Копирует один или больше файлов на другое место.
CTTY - Изменяет терминальное устройство, используемое для управления вашей системой.
DATE - Отображает или устанавливает дату.
DEL - Удаляет один или более файлов.
DEBUG - Выполняет отладку, тестирование программ и редактирование инструментальных средств.
DIR - Отображает список файлов и поддиректорий в директории.
DISKCOMP - Сравнивает содержимое двух дискет.
DISKCOPY - Копирует содержимое одной дискеты на другую.
DOSKEY - Редактирует командные строки, восстанавливает команды Windows и создает макрос.
ECHO - Отображает сообщения, или включает/выключает вывод команд.
EMM386 - Включает/выключает поддержку расширенной памяти EMM386.
ENDLOCAL - Заканчивает локализацию изменений окружающей среды в *.BAT-файле.
ERASE - Удаляет один или более файлов.
EXIT - Прекращает выполнение программы (интерпретатор команд).
EXTRACT - Средство извлечения информации из CAB - файлов.
FC - Сравнивает два файла или установки файлов, и отображает различие между ними.
FIND - Ищет текстовую строку в файле или файлах.
FINDSTR - Поиск строк в файлах.
FOR - Выполняет указанную команду для каждого файла в наборе файлов.
FORMAT - Форматирует диск для использования с Windows.
FTYPE - Отображает или модифицирует типы файлов, используемых в связях расширений.
GOTO - Направляет интерпретатор команд Windows NT к помеченной строке в *.BAT-файле.
GRAFTABL - Способность Windows отображать символы псевдографики, вставленные в графическом режиме.
HELP - Обеспечивает информацию Help для команд Windows.
IF - Выполняет обработку условия в *.BAT-файле.
KEYB - Конфигурирует клавиатуру для заданного языка.
LABEL - Создает, изменяет, или удаляет метку тома на диске.
LOADHIGH(LH) - Загружает программу в верхние адреса памяти.
MD - Создает директорию.
MEM - Отображает величину используемой и свободной памяти в вашей системе.
MKDIR - Создает директорию.
MODE - Конфигурирует системное устройство.
MORE - Отображает вывод одного экрана за раз.
MOVE - Перемещает один или более файлов из одной директории в другую на том же диске.
NETSTAT - Отображает статистики протоколов и текущих сетевых соединений TCP/IP.
NLSFUNC - Загружает информацию, специфическую для страны.
PATH - Отображает или устанавливает путь поиска для выполняемых файлов.
PAUSE - Приостанавливает обработку *.BAT-файла и отображает сообщение.
POPD - Восстанавливает предыдущее значение текущей директории, сохраненной по PUSHD.
PRINT - Печатает текстовый файл.
PROMPT - Изменяет подсказку к командам Windows.
PUSHD - Сохраняет текущую директорию, потом изменяет.
RD - Удаляет директорию.
RECOVER - Восстанавливает читаемую информацию с плохого или дефектного диска.
REM - Записывает комментарии (примечания) в *.BAT-файлы или CONFIG.SYS.
REN - Переименует файл или файлы.
RENAME - Переименует файл или файлы.
REPLACE - Заменяет файлы.
RESTORE - Восстанавливает файлы, которые были архивированы с использованием команды BACKUP.
RMDIR - Удаляет директорию.
SET - Отображает, устанавливает или удаляет переменные среды Windows.
SETLOCAL - Начинает локализацию изменений среды в *.BAT-файле.
SETVER - Устанавливает номер версии MS-DOS, который Windows сообщает программе.
SHIFT - Сдвигает позицию замещаемых параметров в *.BAT-файле.
SMARTDRV - Инсталлирует и конфигурирует утилиту кэширования диска SMART - драйва.
SORT - Сортирует входной поток.
START - Стартует отдельное окно для выполнения указанной программы или команды.
SUBST - Связывает путь с литерой диска.
SYS - Копирует файлы системы MS-DOS и интерпретатор команд на указанный вами диск.
TIME - Отображает или устанавливает системное время.
TITLE - Устанавливает заголовок окна для сеанса .
TREE - Графически отображает структуру директория в драйве или путь.
TYPE - Отображает содержимое текстового файла.
VER - Отображает версию Windows.
VERIFY - Сообщает Windows, проверять ли правильность записи файлов на диск.
VOL - Отображает метку дискового тома и серийный номер.
XCOPY - Копирует файлы и деревья директории.

------------------

reg - непосредственная работа с реестром. Смотреть reg /? всем!
rcp - обмен файлами через rcp в ascii
runas - от имени пользователя
tasklist - отображает приложения и сеансы, связанные с ним.
taskkill - позволяет завершить один или несколько процессов
tftp - trivial ftp
tskill - убить процесс
bootcfg - настройка boot.ini
append - позволяет открывать удаленные файлы так, словно они находятся в текущем.
getmac - получить мас
logoff - Заверщить пользовательский сеанс.
mem - вывод на экран сведений о текущих процессах в ОЗУ
mqbkup - архивирование
netsh - ??
openfiles - просмотреть открытые файлы.
rsh - выполнение команд на удаленных узлах с запущеной rsh
sc - command line ??
rexec - выполнение команд на удаленных узлах с запущеной rexec
shutdown - выключить (хе-хе) local or remote computer.
systeminfo - вывод инфы о компе.
schtasks - планировщик заданий.
xcopy - копирование файлов и каталогов.
tsshutdn - завершение работы сервера в установленом порядке.
set - вывод, задание и удаление переменных среды cmd.exe. Свойства системы (пр.кн."мой комп") - дополнительно - Переменные среды. Там не все переменные, но много! Все смотреть просто set.


======================================================================


rundll32 user,wnetdisconnectdialog
Окно "Отключение сетевого диска" Вызвать

rundll32 user,disableoemlayer
Сбой пpовоциpовать

rundll32 user,repaintscreen
Обновить (как <F5>)

rundll32 user,setcursorpos
Maus-Cursor слева ввеpх посадить

rundll32 diskcopy,DiskCopyRunDll
Окно "Copy Disk" вызвать

rundll32 rnaui.dll,RnaWizard /1
Диалог "Установка Связи" вызвать (/1 = без окна)

rundll32 shell,shellexecute
Explorer-Окно откpыть в коpневом каталоге

rundll32 shell32,OpenAs_RunDLL
Окно "Откpыть с помощью..." вызвать***

rundll32 shell32,SHFormatDrive
Окно "Фоpматиpование: Диск3,5(А)" вызвать

rundll32 shell32,ShellAboutA
Info-Box (о Windows) вызвать

rundll32 shell32,SHExitWindowsEx 0
Windows 98 заново стаpтанyть (без autoexec.bat и дp.)

rundll32 shell32,SHExitWindowsEx 1
Работy с Windows 98 закончить

rundll32 shell32,SHExitWindowsEx 2
Windows-98-PC boot

rundll32 shell32,SHExitWindowsEx -1
Windows-98-Explorer стаpтанyть заново

rundll32 shell32,Control_RunDLL
Откpыть окно "Панель yпpавления"

rundll32 shell32,Control_RunDLL desk.cpl
Откpыть "Свойства Экpана"

rundll32 shell32,Control_RunDLL main.cpl <n>
Откpыть Modul-Панели yпpавления из MAIN.CPL **

rundll32 krnl386.exe,exitkernel
выход из Windows без любых сообщений/вопpосов

rundll32 user,swapmousebutton
"Пеpеставить" клавиши мыши *

rundll32 keyboard,disable
"Отключить" клавиатypy *

rundll32 mouse,disable
"Отключить" мышь *

rundll rnaui.dll,RnaDial "пpовайдеp"
Вызвать окно "Установка связи" с именем "пpовайдеp"

rundll32 user,tilechildwindows
выстpоить все не свёpнyтые окна свеpхy вниз

rundll32 user,cascadechildwindows
выстpоить все не свёpнyтые окна каскадом

rundll32 sysdm.cpl,InstallDevice_Rundll
(единств. возможность в W98) yстановить non-Plug&Play обоpyдование

rundll32 msprint2.dll,RUNDLL_PrintTestPage
выбpать в появившемся меню пpинтеp и послать а него тест

rundll32 user,setcaretblinktime <n>
yстановить новyю частотy мигания <n> кypсоpа *

rundll32 user, setdoubleclicktime <n>
yстановить новyю скоpость <n> двойного нажатия *

rundll32 setupx.dll,InstallHinfSection
DefaultInstall 130; C:\file.inf
окно "Пеpезапyск системы. Пpоизвести её сейчас ? ъ Да/нет ъ" ****

===========================================

Также посети вот эту ветку на форуме...
_http://forum.madalf.ru/index.php?showtopic=5904&st=0

alexcop 02.04.2005 04:34

Псих
а команды DOS'a уже не момним?
Все основно на них...

Ghost 02.04.2005 06:19

Псих
В командной строке:
help - выводит список команд;
help <имя команды> - выводит справку по указанной команде.

Псих 02.04.2005 15:32

Цитата:

Ghost:
Псих
В командной строке:
help - выводит список команд;
help <имя команды> - выводит справку по указанной команде.
Благодарю!
Цитата:

alexcop:
а команды DOS'a уже не момним?
Все основно на них...
Знаю.. но далеко не все команды!

CHEST Спасибо!

Псих 07.04.2005 17:22

Вот ща ломаю голову. хочу зделать маил чеккер. Чтобы просто проверял, есть ли новые письма.

С телнетом и авторизацией разобрался, а вот как операцию чека провести, подскажите?

Premium 08.04.2005 05:56

Псих
А зачем телнетом, есть нормальные консольные проги для проверки мыла, если уж тебе батником охота сделать. http://imho.ws/showthread.php?t=75962

Псих 08.04.2005 23:36

Спасибо, мне даже не существенно важно, я просто хочу поупражняться в кодинге на бат, вот и все!

Псих 21.04.2005 10:47

Ребята, можете посвятить подробно, как через бат создать меню с оператором case.
И какие есть ключи для операторов?

Псих 23.04.2005 01:59

Как можн прописать ,чтобы файл копировал сам себя но с другим именем!!

Ghost 23.04.2005 06:27

Код:

copy %~nx0 copy%~nx0
?

%0 - имя текущего выполняемого cmd- или bat-файла, а дальше:
Код:

Допускается применение следующих синтаксических конструкций:

    %~I        - из переменной %I удаляются обрамляющие кавычки (")
    %~fI        - переменная %I расширяется до полного имени файла
    %~dI        - из переменной %I выделяется только имя диска
    %~pI        - из переменной %I выделяется только путь к файлу
    %~nI        - из переменной %I выделяется только имя файла
    %~xI        - из переменной %I выделяется расширение имени файла
    %~sI        - полученный путь содержит только короткие имена
    %~aI        - переменная %I расширяется до атрибутов файла
    %~tI        - переменная %I расширяется до даты /времени файла
    %~zI        - переменная %I расширяется до размера файла
    %~$PATH:I  - проводится поиск по каталогам, заданным в переменной
                  среды PATH, и переменная %I заменяется на полное
                  имя первого найденного файла.  Если переменная PATH
                  не определена или в результате поиска не найден ни
                  ни один файл, то этот модификатор заменяется на пустую
                  строку

При объединении нескольких операторов можно получить следующие результаты:

    %~dpI      - переменная %I заменяется только на имя диска и путь
    %~nxI      - переменная %I заменяется только на имя файла и его
                  расширение
    %~fsI      - переменная %I заменяется только на полный путь с
                  краткими именами
    %~dp$PATH:I - проводится поиск по каталогам, заданным в переменной
                  среды PATH, и переменная %I заменяется на имя диска
                  и путь к первому найденному файлу.
    %~ftzaI    - переменная %I заменяется на строку, выдаваемую
                  командой DIR


Premium 23.04.2005 09:07

Цитата:

Псих:
как через бат создать меню с оператором case
Case - в vbs
В XP для меню можно пользоваться set /p
Код:

@ECHO OFF

:_menu
CLS
ECHO.
ECHO  ******************
ECHO.
ECHO    1. First
ECHO    2. Second
ECHO    3. Exit
ECHO.
ECHO  ******************
ECHO.
SET /P reply=Write here[1,2,3] and press Enter:

IF /I "%reply%"=="1" GOTO :_first
IF /I "%reply%"=="2" GOTO :_second
IF /I "%reply%"=="3" GOTO :_end
GOTO :_error

:_first
CLS
ECHO You select "First"
PAUSE
GOTO :_menu

:_second
CLS
ECHO You select "Second"
PAUSE
GOTO :_menu

:_end
CLS
ECHO You select "Exit", buy-buy ...
PAUSE
GOTO :eof

:_error
CLS
ECHO Wrong! Press 1,2 or 3, please
PAUSE
GOTO :_menu

:eof

А можно по совету майкрософта сделать себе reply.com
http://support.microsoft.com/default...;EN-US;Q77457&

Псих 01.07.2005 22:14

Вот еще вопрос.
у меня есть 10 ярлыков ссылок там 111.url и т.д
как мне с помощью бат загнать адреса этих *.url в тхт файл?

Premium 02.07.2005 00:15

Псих
*.url сам по себе txt-файл и работать с ним в батнике надо, как с обычным *.txt. Мышкой перетащи *.url в блокнот, там по идее будет что-нибудь вроде
Цитата:

[InternetShortcut]
URL=http://www.tech-recipes.com
Modified=107A591326D1C401B2
у твоих *.url что вовнутрях? Там еще может быть ORIGURL, BASEURL, еще что-то.
Приблизительно так
Код:

FOR %%A IN (*.URL) DO (
 MORE<"%%A"|FIND "URL=">>D:\MYURL.TXT
)

Я обычно консольной утилиткой ссылки вытаскиваю, GetUrls.zip лежит тут
http://gearbox.maem.umr.edu/batch/f_...-Freeware.html

Псих 02.07.2005 00:43

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

Premium:
FOR %%A IN (*.URL) DO (
MORE<"%%A"|FIND "URL=">>D:\MYURL.TXT
)
Что для чего и т.д.

Premium 02.07.2005 02:32

Подробней и понятней, чем Майкрософт во встроенном хэлпе все равно не получится. В командной строке набери FOR /? . Выполнение указанной команды для каждого файла набора.

То есть FOR %%A IN (*.URL) DO - значит для каждого файла с расширением *.URL в текущей папке сделать ... И после DO пишешь команду, которую хочешь применить.

Можно написать:
FOR %%A IN (*.URL) DO ECHO "%%A">>MYURL.TXT
Все имена файлов *.URL будут записаны в файл MYURL.TXT

Можно написать:
FOR %%A IN (*.URL) DO TYPE "%%A">>MYURL.TXT
Все содержимое файлов *.URL будет записано в файл MYURL.TXT

Можно написать:
FOR %%A IN (*.URL) DO FIND "URL=" "%%A">>MYURL.TXT
Все найденные ссылки в файлах *.URL будут записаны в файл MYURL.TXT. Или точнее, все строчки, в которых есть сочетание "URL=" будут записаны в файл MYURL.TXT.
Только так команда FIND еще добавит названия файлов до кучи в MYURL.TXT, что не просили. Посему я и написал MORE<"%%A"|FIND "URL=", то есть вывод содержимого каждого файла *.URL в STDOUT и поиск командой FIND там.

Если пользоваться той утилкой, geturls.exe, то батник будет выглядеть:
Код:

@ECHO OFF
FOR %%A IN (*.URL) DO (
 MORE<"%%A"|GETURLS>>MYURL.TXT
)


FAndry 26.03.2006 05:15

Программирование .BATников MS-Dos
 
Господа, возникла необходимость состряпать БАТник, который будет запускаться при каждом запуске системы.
Задача БАТника:
1. Сравнить 2 файла в разных папках
Если файлы одинаковые, то перейти к пункту 3.
Если файлы отличаются: Скопировать новый файл в папку бекапа с новым именем (формат имени файла: текущие <ДАТАВРЕМЯ>, расширение остается прежним.
2. Анализ файлов в папке бекапа и удаления самых устаревших по дате изменения/создания файлов, так чтобы общее числол файлов в папке бекапа не превышало 60 штук!
3.Конец выполнения БАТ-Файла!

Жду предложений. Нужно делать это именно БАТ-файлом, вариант с установкой программ бекаперов не подходит!

Wiedemann 26.03.2006 21:34

Таже вопросик..
Делаются бекапы. Например:
с:\BackUp\....
Нужно, чтобы создавалась директория "2006" - год, а в ней "03" - месяц. Т.е. чтобы каждый месяц архивы начинали складываться в новую папку

Borland 27.03.2006 01:16

Цитата:

FAndry:
Сравнить 2 файла в разных папках
Код:

fc File.1 File.2
, где File.x - имя файла в текущей папке либо с указанием полного пути.
Цитата:

FAndry:
Если файлы отличаются: Скопировать новый файл в папку бекапа с новым именем (формат имени файла: текущие <ДАТАВРЕМЯ>, расширение остается прежним.
Код:

If ERRORLEVEL 1 Copy File.1 x:\Backup_folder\File%DATE%.1
Аналогично %DATE% можно добавить и %TIME%, но, для того, чтобы оно нормально работало, необходимо в региональных настройках убрать (или заменить на что-то приемлемое, например на "_") разделитель часов с минутами и секундами (по умолчанию - двоеточие; использование этого символа в имени файла недопустимо).
Комментарий Модератора:
Borland:
Или воспользоваться "конструкцией" %DTSTRING% :)
Цитата:

FAndry:
2. Анализ файлов в папке бекапа и удаления самых устаревших по дате изменения/создания файлов, так чтобы общее числол файлов в папке бекапа не превышало 60 штук!
Насколько я помню, средства для реализации этой операции в командном процессоре и стандартных консольных прогах винды отсутствуют. Придётся привлекать другие средства (например - Windows Scripting Host или тот же nncron)
Комментарий Модератора:
Borland:
Если в имени присутствует вышеупомянутый %DTSTRING%, то анализ даты/времени можно исключить, переформулировав задачу как "удалить все бэкапы за исключением 60 последних"
Код:

pushd "x:\Backup_folder\"
for /f %%A in ('dir /B /A:-D /O:-N file*^|more +60') do del /q "%%~A"
popd

Данный код удаляет все (кроме 60 самых новых) файлы в папке с резервными копиями, соответствующие маске "file*", для которых хвост имени формировался при помощи %DTSTRING" :)

Nicodim 27.03.2006 22:41

может тебе эта статья поможет _http://www.mista.ru/articles1c/tips.htm
P.S. это не реклама, просто недавно ещё раз перчитывал, вот и вспомнил про неё

crawler 29.03.2006 00:31

Цитата:

Borland:
Цитата:

FAndry:
2. Анализ файлов в папке бекапа и удаления самых устаревших по дате изменения/создания файлов, так чтобы общее числол файлов в папке бекапа не превышало 60 штук!
Насколько я помню, средства для реализации этой операции в командном процессоре и стандартных консольных прогах винды отсутствуют. Придётся привлекать другие средства (например - Windows Scripting Host или тот же nncron)
По моему можно сделать довольно простой цикл по "DIR /O-D /B", внутри цикла поставить счетчик, первые 60 знaчений пропустить , а все остальные файлы потереть. Вероятно придется задействовать "delayed variable expansion" (это которые с восклицательными знаками вокруг переменной вместо процентов) для счетчика. http://imho.ws/showthread.php?t=98481

Wiedemann
http://imho.ws/showpost.php?p=882716

Moderator: А чегой то тема про бэтчи лежит в "Интернете" а не в "програмировании" ?

Borland 29.03.2006 21:11

Цитата:

crawler:
А чегой то тема про бэтчи лежит в "Интернете" а не в "програмировании" ?
Так исторически сложилось, что подраздел "Руководство для новичков" лежит в разделе Интернет. А новички - они и в написании batch новички! :)

LosDigo 05.04.2006 18:54

MS-DOS
 
Создать BAT-файл.
"Загружено операционная система. Отформатировать диск А как системный. Текщим является дисковод А. Посмотреть содержание диска А. Скопировать все файлы с расширением PAS и BAK с диска С в корневой каталог диска А. Все файлы на диске А, не имеющие расширения ВАК, удалить. Восстановить на диске А удаленные файлы. На диске А организовать файловую структуру следующим образом: все файлы с расширением PAS переместить в подкаталог PAS, а файлы с расширением ВАК в подкаталог ВАК корневого каталога диска А."

Все файлы на диске А, не имеющие расширения ВАК, удалить. - Как реализовать???

Cartman 05.04.2006 19:06

Объединяю.

Warchief 01.09.2006 15:56

А как включить через .bat подключение по локальной сети? Пробовал сделать через ярлык по типу start "путь к ярлыку" , но что-то так не работает.

Borland 01.09.2006 16:17

Warchief
А подробнее можно? Подключение сетевых дисков или вход в домен или что?

Warchief 01.09.2006 16:27

Borland
Да нет просто включение сетевого подключения. Вместо того чтобы идти в
"сетевые подключения" и там кликать по иконке, хотел сделать bat файл.

Gr@nd@d 05.09.2006 14:20

Цитата:

Сообщение от Warchief
BorlandДа нет просто включение сетевого подключения. Вместо того чтобы идти в "сетевые подключения" и там кликать по иконке, хотел сделать bat файл.

Не понятно: нужно включить отключенную сетевую карту или подключить сетевой ресурс?
Если второе - "NET USE ?" с консоли.

Merlin Cori 05.09.2006 14:55

Warchief

вот это:
_http://support.microsoft.com/kb/311272/ru
прям для тебя

DIZEL777 19.11.2006 01:40

Привет. :beer: Народ с чего начать? :help: Раньше не программировал, думаю начать с Батников.
Что нужно прочитать, какой синтаксис написания

Hatifnatt 19.11.2006 03:36

DIZEL777 для начала можно прочитать эту тему с начала, там приведены команды которые можно использовать в bat файлах, а вообще "батники" это не то с чего нужно начинать заниматься программирование.
Если нужно именно программирование, то тогда уж начинать так сказать "классически" с паскаля или Delphi (или даже с basic-ка).
По ним и книжек можно найти и вообще море информации. По "программированию в bat" ты так много информации не найдешь.

NSE 16.03.2007 06:43

Собственно вопрос.
Нужно из %1 выделить имя файла с расширением. %~nx1 не работает в силу ряда причин. сделал так:

set i=%1
set TEMP=C:\TEMP
copy %1 %TEMP%
cd C:\TEMP
if exist etoono.txt del etoono.txt
SET B=""
dir %1 /B>>etoono.txt
for /f "tokens=* delims=." %%A in (etoono.txt) do set B=%%A
if exist etoono.txt del etoono.txt


Но это криво. Хочется прямо. Какие будут предложения?

Borland 16.03.2007 11:21

Цитата:

Сообщение от NSE (Сообщение 1374861)
%~nx1 не работает в силу ряда причин.

В силу каких таких причин?
Только что проверил - у меня всё прекрасно работает...
Да, нельзя применять оператор ~nx к переменной окружения, установленной командой set внутри того же пакетного файла - он получит на входе пустую строку, что с его точки зрения недопустимо. Да, команда echo %i в вышеприведённом пакетном файле выдаст пустую строку - это какое-то фундаментальное ограничение командного процессора.
Но какие причины мешают использовать в командах пакетного файла непосредственно %~nx1 в качестве искомого имени с расширением? :confused:

NSE 16.03.2007 12:55

Согласен, на обычных батниках %~nx1 работает замечательно. Но есть такая прога Pview_X5, которая свои настройки хранит в файле с расширением EXT. Но на деле это простой батник. И именно его мне нада править. И именно в нем расширенный синтаксис типа %~nx1 не работает. Почему не работает я не знаю:(

сама прога

Borland 16.03.2007 13:26

Цитата:

Сообщение от NSE (Сообщение 1375087)
И именно его мне нада править

И в чём проблема?
echo %~nx1>>file.ext выдаст в file.ext как раз-таки имя файла с расширением.
Если структура file.ext (фактически простой текстовый файл) известна, то ничто не мешает сформировать его при помощи команд типа вышеприведённой перед запуском проги...
Если уж совсем невмоготу, с тем же успехом практически всё содержимое приведённого командного файла можно заменить на вызов одного внешнего cmd-шника типа call set_b %1, в котором будет всего одна команда set b=%~nx1
Эффект будет ровно такой же - переменная окружения B будет установлена в требуемое значение.

добавлено через 2 минуты
Цитата:

Сообщение от NSE (Сообщение 1375087)
сама прога

Ещё раз приаттачишь прогу - получишь нефиговый штраф! :mad:

Drol 17.09.2007 14:13

а кто знает команду, которое автоматически закрывает ту или иную программу.
например подтип такого
close.bat
---
CloseRun mspaint.exe

или

tskill mspaint.exe

coolchevy 21.01.2008 21:14

помогите написать "батник"
 
прошу помощи в написании батника, задача такова:
есть 5 файлов, file, file_1, file_2,file_3, file_4
нужно в результате обработки скрипта, получать вот такое вот переименование
file > file_1
file_1> file_2
file_2 > file_3
file_3 > file_4
file_4 > file

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

объясню зачем: настроил инкрементальное архивирование, хотел бы еще иметь разнос по времени в один час.

на perl-е, либо php, написал бы и сам, а вот виндовс-консоль побороть не смог, помогить кто чем может

wmi скрипт тоже подойдет.

baron386 21.01.2008 21:56

cd "там где лежат файлы"
move file_4 file_tmp
if errorlevel 1 goto ErrorMove
move file_3 file_4
if errorlevel 1 goto ErrorMove
move file_2 file_3
if errorlevel 1 goto ErrorMove
move file_1 file_2
if errorlevel 1 goto ErrorMove
move file file_1
if errorlevel 1 goto ErrorMove
move file_tmp file
if errorlevel 1 goto ErrorMove
exit
:ErrorMove
... действия при ошибке перемещения....

Borland 21.01.2008 22:25

Примерно так:
renamer.cmd
Код:

@echo off
set TMPFILENAME="file0.tmp"
set LOGFILENAME="logfile.txt"
set FILENAME1="file_1"
set FILENAME2="file_2"
set FILENAME3="file_3"
set FILENAME4="file_4"
set FILENAME5="file"

IF EXIST "%TMPFILENAME%" (
echo ABNORMAL LASTTIME TERMINATED!!! EXITING.
echo SEE "%LOGFILENAME%" FOR DETAILS
echo PRESS ANY KEY TO EXIT
pause>nul
goto FINISH
)
echo Started at %DATE% %TIME% >"%LOGFILENAME%"
ren "%FILENAME5%" "%TMPFILENAME%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%FILENAME5%" to "%TMPFILENAME%" at %DATE% %TIME% >>"%LOGFILENAME%"
ren "%FILENAME4%" "%FILENAME5%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%FILENAME4%" to "%FILENAME5%" at %DATE% %TIME% >>"%LOGFILENAME%"
ren "%FILENAME3%" "%FILENAME4%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%FILENAME3%" to "%FILENAME4%" at %DATE% %TIME% >>"%LOGFILENAME%"
ren "%FILENAME2%" "%FILENAME3%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%FILENAME2%" to "%FILENAME3%" at %DATE% %TIME% >>"%LOGFILENAME%"
ren "%FILENAME1%" "%FILENAME2%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%FILENAME1%" to "%FILENAME2%" at %DATE% %TIME% >>"%LOGFILENAME%"
ren "%TMPFILENAME%" "%FILENAME1%"
IF ERRORLEVEL 1 GOTO TERMINATE
echo Renamed "%TMPFILENAME%" to "%FILENAME1%" at %DATE% %TIME%>>"%LOGFILENAME%"
echo Finished Successfully at %DATE% %TIME%>>"%LOGFILENAME%"
GOTO FINISH

:TERMINATE
echo ABNORMAL TERMINATION!!!
echo ABNORMAL TERMINATION at %DATE% %TIME% >>"%LOGFILENAME%"
echo SEE "%LOGFILENAME%" FOR DETAILS
echo PRESS ANY KEY TO EXIT
pause>nul

:FINISH
REM Здесь ещё можно встроить отправку лога консольным mail-клиентом на админское мыло
EXIT

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


Часовой пояс GMT +4, время: 12:14.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.