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

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

Vladskiy 01-09-2020 14:51 2932639

cmd и echo внутри цикла
 
День добрый.
Видимо глаз совсем замылился и не вижу ошибку.
Код:

set "SOFT_version=1.2.3.4"
setlocal enabledelayedexpansion
set count_patch=0
for /L %%n in (1,1,100) do (
set /a count_patch+=1
set "patch_number=!count_patch!"
set "pname=!SOFT_Version!-!patch_number!"
set "path_patch="Z:\SOFT версии\Патчи\!pname!""
set "folder=!path_patch!"
echo !folder!
pause
cd !folder!>nul
if /i !errorlevel! EQU 1 (set /a count_patch-=1
msg * Установлено !count_patch! фиксов для верcии !SOFT_version!
exit
) else (
echo установка патча произведена>Z:\!--Logs--!\update_SOFT_fix\%computername%.txt
)

и вот косяк в строчке
Код:

echo установка патча произведена>Z:\!--Logs--!\update_SOFT_fix\%computername%.txt
при отключенном @echo off
на экране видно что отрабатывает это как
Код:

echo установка патча произведена 1>Z:\!--Logs--!\update_SOFT_fix\%computername%.txt
и соответственно запись в файл не происходит.

в чем может быть дело?

Elven 01-09-2020 15:32 2932645

Z похоже на сетевой диск. Пользователь от имени которого выполняется команда видит этот диск? (в "видит" я вкладываю:
1. разрешена ли запись для шары для этого пользователя
2. есть ли соответствующие NTFS права на этой шаре
3. примаплен ли диск)
ну и главный вопрос - где объявляется переменная !--Logs--!?

Vladskiy 01-09-2020 15:57 2932646

Цитата:

Цитата Elven
Z похоже на сетевой диск. Пользователь от имени которого выполняется команда видит этот диск? (в "видит" я вкладываю:
1. разрешена ли запись для шары для этого пользователя
2. есть ли соответствующие NTFS права на этой шаре
3. примаплен ли диск)
ну и главный вопрос - где объявляется переменная !--Logs--!? »

да, диск сетевой. примаплен и пользователь видит и имеет все соответствующие права
!--Logs--! это папка в которую падают куча логов, в том числе и планируется об апдейте софта

попробовал и изменил путь до сохранения логов - не смотря на то, что на экране все равно выводит
Код:

echo установка патча произведена 1>Z:\%computername%.txt
стало наконец то писать лог.

теперь вопрос, как все таки заставить писать логи именно в папку Z:\!--Logs--!\update_SOFT_fix\
именно используя папку !--Logs--!

Elven 01-09-2020 16:08 2932648

экранировать !. сколь я помню в cmd это делается при помощи ^, т.е. по пути
Код:

Z:\^!--Logs--^!\update_SOFT_fix\
должно писаться нормально, если дело было в этом.

Vladskiy 01-09-2020 16:10 2932649

разобрался.

до цикла объявил
set "Logs_Folder=^!--Logs--^!"

ну и в echo стало

Код:

echo установка патча произведена>Z:\!LogFolders!\update_SOFT_fix\%computername%.txt
Elven, огромное спасибо за помощь!
Второй день бился с этой проблемой. Реально - замылился глаз

megaloman 01-09-2020 19:39 2932669

Если без setlocal enabledelayedexpansion то имя папки !--Logs--! воспримется правильно
Тупо переписал Ваш код
Код:

@Echo Off
cls
        Set "SOFT_version=1.2.3.4"
        For /L %%n in (1,1,100) Do (
                Set /a count_patch+=1
                Call Set "patch_number=%%count_patch%%"
                Call Set "pname=%SOFT_Version%-%%patch_number%%"
                Call Set "path_patch=Z:\SOFT версии\Патчи\%%pname%%"
                Call Set "folder=%%path_patch%%"

Call Echo "%%folder%%"
                Call CD "%%folder%%">nul 2>nul || (
                        Call Set /a count_patch-=1
                        Call msg * Установлено %%count_patch%% фиксов для верcии %SOFT_version%
                        Exit /B 1
                )
                Echo установка патча произведена>Z:\!--Logs--!\update_SOFT_fix\%computername%.txt
        )
Pause
Exit /B

Однако, ИМХО, Ваш код можно упростить
Код:

@Echo Off
cls
        Set "SOFT_version=1.2.3.4"
        For /L %%n in (1,1,100) Do (
                If Not Exist "Z:\SOFT версии\Патчи\%SOFT_Version%-%%n" (
                        Set /A count_patch=%%n-1
                        Call msg * Установлено %%count_patch%% фиксов для верcии %SOFT_version%
                        Exit /B 1
                )
                Echo установка патча произведена>Z:\!--Logs--!\update_SOFT_fix\%computername%.txt
        )
Pause
Exit /B



Время: 14:25.

Время: 14:25.
© OSzone.net 2001-