Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проблема со сложением и выводом строк в bat файле (http://forum.oszone.net/showthread.php?t=230960)

s_a_v_e 21-03-2012 23:52 1884318

Проблема со сложением и выводом строк в 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 1884337

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

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

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

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

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

s_a_v_e 22-03-2012 12:58 1884580

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

sno 18-04-2022 16:28 2983492

Коллеги, дабы не плодить еще одну тему.
Тоже самое либо пишет "Режим вывода команд на экран (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 2983504

Цитата:

Цитата sno
Прошу покажите в чем ошибка, где не прав, и не так мыслю ? »

Сначала надо было изучить матчасть. :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 не тестировал - нет его у меня.


Время: 00:04.

Время: 00:04.
© OSzone.net 2001-