В вашем примере не законченная команда. В окончательном виде будет выглядеть примерно так:
set "filename="
for /f %%i in ('dir /b /T:A /A:-D /O:-D *.xls') do (
set "filename=%%~i"
goto:finloop
)
:finloop
echo.%filename%
Все построено на умении команды dir сортировать файлы с помощью опций /o и /t. А дальше просто берется первая строка вывода dir, сохраняется в переменную, в конце переменная выводится на экран.
Напишите makefile - это общепринятая практика компиляции программ.
Обычно еще процесс компиляции разбивают на компиляцию объектных файлов и линковку их в исполняемый файл. Для этого добавляют опцию -c в компиляцию. Но это не обязательно.
Дальше можно добавить опции отладки или наоборот оптимизации, -pedantic -Wall и -std=XXX
В общем gcc --help вам в помощь.
mkdir способен создавать сразу несколько вложенных каталогов, т.е.
mkdir dir1\dir2\dir3\dir4
если существует только dir1, то остальную часть он создаст одной командой.
Но это не ваш случай.
Если в файле развесистое дерево, то одним хитрым вызовом тут не обойтись.
Читайте файл по строчно, анализируйте количество пробелов перед именем, создавайте каталог в нужном месте.
Это можно сделать в батнике, но если вы знаете vbs или js, то лучше использовать их.
1.Можно настроить ярлыки запуска с нужным текущим каталогом.
2.При запуске cmd можно задать выполнение команды перехода в нужный каталог.
cmd /?
Думаю, что аналогично можно сделать и в PS.
Включаем
setlocal enabledelayedexpansion
и далее искомую переменную используем так:
echo.!1c_filial!
Но лучше сразу ее пересохранить в более удобоваримую переменную:
set "filial_1c=!1c_filial!"
и далее пользуйтесь filial_1c
Вы не правильно понимаете. Команда del - это внутренняя команда cmd (нет файла del.exe в системе), поэтому чтоб ее выполнить нужно запустить cmd. Есть еще и другие внутренние команды cmd: echo, if, for ...
Все очень просто - представьте, что будет, если при запуске скрипта не указать первый параметр?
Будет ошибка синтаксиса. Обрамляющие минусы нужны, что бы не было ошибки. Но правильней использовать кавычки для этих целей: if "%1" equ ""
Не уверен, что вообще это можно сделать.
На сколько я знаю, python оперирует UNICODE символами, соответственным образом настраивает консоль.
cmd с юникодом уживается очень плохо.
Для UTF-8 в cmd кодовая страница имеет номер 65001. Попробуйте ее указать в вызове chcp 65001 и далее через амперсанд указывайте другие нужные команды:
cmd = 'chcp 65001 & echo Русский текст& dir /b/s'
Обычно то что вы описали делается с помощью скрипта для ftp, который используется с помощью опции -s утилиты ftp. Если у вас так, то добавьте в скрипт команду выхода (quit).
Если по другому, то нужно больше деталей.
Проблема #1: если вы уберете кавычки, то символы < > будут вызывать ошибки, т.к. это служебные символы в батниках - символы перенаправления. Попробуйте их экранировать: ^> ^<
Попробуйте, может с экранированием прокатит. Вообще в батниках проблема с экранированием, порой нерешаемая. Я несколько раз сталкивался с тем, что проще было написать скрипт, например на javascript из-за проблемы с экранированием служебных символов.
Но у вас простой вариант, должно получиться. Я сейчас пока сам не могу проверить.
Проблема #2: Приведите цикл к такому виду:
for /f "tokens=* delims=" %%a in ('dir /b /a:d /o:n "H:\fonts\*"')
Проблема #3: Я бы предложил вам сделать 2 заготовки для результирующего xml - часть до вставки (header) и часть после вставки. После формирования вставки просто сложите 3 части таким образом:
copy header.xml+insert.xml+footer.xml library.xml
Либо и остальной xml так же генерируйте батником.
Проверьте права доступа на i:\sql\base, для пользователя под которым работает батник из шедулера.
Полезно, чтоб батник писал лог, ошибки каждой команды перенаправляйте в лог, например так:
sel "LOG=%~dpn0.log"
1>nul 2>>"%LOG%" del /f /q I:\SQL\base\base*