Войти

Показать полную графическую версию : [решено] cmd и echo внутри цикла


Vladskiy
01-09-2020, 14:51
День добрый.
Видимо глаз совсем замылился и не вижу ошибку.

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

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

попробовал и изменил путь до сохранения логов - не смотря на то, что на экране все равно выводит
echo установка патча произведена 1>Z:\%computername%.txt
стало наконец то писать лог.

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

Elven
01-09-2020, 16:08
экранировать !. сколь я помню в cmd это делается при помощи ^, т.е. по пути Z:\^!--Logs--^!\update_SOFT_fix\ должно писаться нормально, если дело было в этом.

Vladskiy
01-09-2020, 16:10
разобрался.

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

ну и в echo стало

echo установка патча произведена>Z:\!LogFolders!\update_SOFT_fix\%computername%.txt

Elven, огромное спасибо за помощь!
Второй день бился с этой проблемой. Реально - замылился глаз

megaloman
01-09-2020, 19:39
@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




© OSzone.net 2001-2012