Войти

Показать полную графическую версию : [решено] Проблема со сложением и выводом строк в bat файле


s_a_v_e
21-03-2012, 23:52
Здравствуйте.

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

@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.

Anonymоus
22-03-2012, 00:25
Зачем вы формируете путь в два прохода? Не проще ли сразу его получать в одной строке, используя параметр и имя нужного файла? В ту же строку можно вставить проверку на то, передается ли параметр вообще.

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

Вот так у вас работает?

Iska
22-03-2012, 00:26
Убрать пробелы при «set»:
set daPath=%~f3
set daPath=%daPath%\MyFile.txt

— они являются значащими символами.

s_a_v_e
22-03-2012, 12:58
Спасибо большое. Работает. Так просто ,а мне то даже в голову не пришло что пробелы могут мешать...
В два прохода - это для примера. Это на самом деле переменная из которой будут разные пути получаться. Root к которому разные файлы приписываются.
Спасибо ещё раз за ответы.

sno
18-04-2022, 16:28
Коллеги, дабы не плодить еще одну тему.
Тоже самое либо пишет "Режим вывода команд на экран (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
19-04-2022, 08:53
Прошу покажите в чем ошибка, где не прав, и не так мыслю ? »Сначала надо было изучить матчасть. :biggrin:
По Вашему верхнему "коду" сложно понять Ваш замысел: куча переменных, которые затем нигде не используются. Как организуется 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 не тестировал - нет его у меня.




© OSzone.net 2001-2012