CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Ответить
Аватара пользователя
s_a_v_e

CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение s_a_v_e »

Здравствуйте.



Пытаюсь получить путь к файлу сложив его из параметра и имени файла. Вот код:



@echo off



set daPath = %~f3



set daPath = %daPath%\MyFile.txt



echo %daPath%



if exist %daPath% (echo "yes") else (echo "no")



В результате запуска получаю:

Режим вывода команд на экран (ECHO) отключен.



Если убираю echo %daPath% - код вообще ничего не выводит. Пробовал убирать @echo off. Тогда выводит только выполняемые инструкции и ничего из echo.



Подскажите что делаю не так ?



Нужно просмотреть какой путь формируется и выполняется ли проверка в if.
Аватара пользователя
Guest

Re: CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение Guest »

Зачем вы формируете путь в два прохода? Не проще ли сразу его получать в одной строке, используя параметр и имя нужного файла? В ту же строку можно вставить проверку на то, передается ли параметр вообще.



Код:

Код: Выделить всё

@Echo Off
If Not "%~3"=="" (Set daPath=%~dp3MyFile.txt)
Echo %daPath%
If Exist "%daPath%" (Echo "yes") Else (Echo "no")

Вот так у вас работает?
Аватара пользователя
Iska

Re: CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение Iska »

Убрать пробелы при «set»:



Код:

Код: Выделить всё

set daPath=%~f3
set daPath=%daPath%\MyFile.txt

— они являются значащими символами.
Аватара пользователя
s_a_v_e

Re: CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение s_a_v_e »

Спасибо большое. Работает. Так просто ,а мне то даже в голову не пришло что пробелы могут мешать...

В два прохода - это для примера. Это на самом деле переменная из которой будут разные пути получаться. Root к которому разные файлы приписываются.

Спасибо ещё раз за ответы.
Аватара пользователя
sno

Re: CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение sno »

Коллеги, дабы не плодить еще одну тему.

Тоже самое либо пишет "Режим вывода команд на экран (ECHO) отключен" либо лога нет совсем, пусто.



Сам код:

@echo off

setlocal enabledelayedexpansion

CHCP 1251

SET PGHOST=localhost

SET PGPORT=5432

SET PGUSER=Testov

SET PGPASSWORD=TestovPass

FOR /F "usebackq delims=" %%j in (`date /t`) do set tDate=%%~j

FOR /F "usebackq delims=" %%j in (`echo %time:~,-3%`) do set tTime=%%~j

FOR /F "usebackq" %%a IN (`CALL "C:\Program Files\PostgreSQL\14\bin\reindexdb.exe"`) DO (

set result=%%a

echo+ %result% >C:\Users\drweb\Desktop\Reindex.Log

)

pause



В кратции есть скрипт реиндексации БД

CHCP 1251

SET PGHOST=localhost

SET PGPORT=5432

SET PGUSER=Testov

SET PGPASSWORD=TestovPass

CALL "C:\Program Files\PostgreSQL\14\bin\reindexdb.exe



Меня озадачили сделать автоматизацию...в целом все работает, да только лога нет, могу сделать лог но без даты внутри лога в строке. Пытался сделать и тоже ошибка Echo.

Прошу покажите в чем ошибка, где не прав, и не так мыслю ?
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле

Сообщение megaloman »

Цитата sno:



Прошу покажите в чем ошибка, где не прав, и не так мыслю ?
CMD/BAT - [решено] Проблема со сложением и выводом строк в bat файле




Сначала надо было изучить матчасть. Изображение

По Вашему верхнему "коду" сложно понять Ваш замысел: куча переменных, которые затем нигде не используются. Как организуется log-файл - каждый раз новый с одним и тем же именем? Или, всё-таки его надо дописывать при каждой реиндексации? ИМХО, лучше бы иметь каждый раз новый с датой и временем в имени. Попытался угадать:

Код:

Код: Выделить всё

@Echo Off
cls
>nul Chcp 1251
	Set "PGhost=localhost"
	Set "PGport=5432"
	Set "PGuser=Testov"
	Set "PGpassword=TestovPass"
	Set Prog="C:\Program Files\PostgreSQL\14\bin\reindexdb.exe"
	Set "Log=C:\Users\drweb\Desktop\Reindex.Log"
	>>"%Log%" 2>>&1 (For /f "usebackq delims=" %%p In (`%Prog%`) Do (
		Call Echo %%Date%% %%Time:~0,-3%% %%p
	))
pause
Exit /B

На реальном reindexdb.exe не тестировал - нет его у меня.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»