Показать полную графическую версию : [решено] Проблема со сложением и выводом строк в bat файле
Здравствуйте.
Пытаюсь получить путь к файлу сложив его из параметра и имени файла. Вот код:
@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")
Вот так у вас работает?
Убрать пробелы при «set»:
set daPath=%~f3
set daPath=%daPath%\MyFile.txt
— они являются значащими символами.
Спасибо большое. Работает. Так просто ,а мне то даже в голову не пришло что пробелы могут мешать...
В два прохода - это для примера. Это на самом деле переменная из которой будут разные пути получаться. Root к которому разные файлы приписываются.
Спасибо ещё раз за ответы.
Коллеги, дабы не плодить еще одну тему.
Тоже самое либо пишет "Режим вывода команд на экран (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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.