Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - помогите пожалуйста выявить ошибку в скрипте

Ответить
Настройки темы
CMD/BAT - помогите пожалуйста выявить ошибку в скрипте

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


вот мое задание. создать файл sh и bat, который выполняет следующее:
На вход пакетному файлу приходит абсолютный или относительный путь к папке (как параметр пакетного файлы). Если такой папки нет, то писать "Данной папки нет" и завершить выполнение программы. Если такая папка есть, то вывести структуру каталога (включая подкаталоги).
dir
-dir1
--dir1.1
--dir1.2
-dir2
--dir2.1
вот мой код
@echo off
SetLocal EnableDelayedExpansion
set var1=%1
set n
set m
m=0
n=0
for /f "delims=\" %var1% %%n in (*.*) do (set /a n=!n!+1)
set /a n=n-1
if exist %var1% (
(for /r /f "delims=\" %var1% %%A in (*.*) do (set /a m=!m!+1)
set /a m=m-1
for /r %var1% %%G in (*.*) do (n=m-n | for /l (n, 0, -1) do echo - | for /r %var1% %%A in (*.*) do (echo %%~nA)))
else (echo "Данной папки нет")
pause

пишет, что m и n не являются внешними или внутренними командами и что непредвиденное появление пути

Отправлено: 21:14, 23-10-2018

 

Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off                                                                                                 
cls
	If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
	If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)
	Tree "%~1"
Exit /B 0

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:47, 23-10-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Код: Выделить весь код
@Echo Off                                                                                                 
cls
	If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
	If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)
	Tree "%~1"
Exit /B 0
только мне не надо делать это с помощью tree, а в виде
dir1
-dir1.1
--dir1.1.1
--dir1.1.2
-dir1.2
-dir1.2.1
dir2
где каждый знак - обозначает степень вложенности файла

Отправлено: 15:45, 31-10-2018 | #3


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off
cls
	If "%~1"=="" (Echo !!! No Input Folder &Pause &Exit /B 2)
	If Not Exist "%~1" (Echo !!! Folder not found "%~1" &Pause &Exit /B 1)

	Set "BoxIn=%~1"
	If "%BoxIn:~-1%"=="\" Set "BoxIn=%BoxIn:~0,-1%"

	Set "Def="
	Set "Marg=   "
rem	Set "Marg="

	Echo %BoxIn%
	For /F "usebackq delims=" %%d IN (`2^>nul Dir "%BoxIn%" /B /A:D`) DO Call :Out "%BoxIn%\%%d" %Def%- "%Marg%" 
pause
GoTo :Eof

:Out
	Echo %~3%2%~nx1
	For /F "usebackq delims=" %%d IN (`2^>nul Dir %1 /B /A:D`) DO Call :Out "%~1\%%d" %2- "%~3%Marg%"
GoTo :Eof

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 31-10-2018 в 21:25.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:35, 31-10-2018 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


предложу и свой вариант, тут форматирование немного другое, но именно как у ТС записано:
Код: Выделить весь код
@echo off
set "sdir=C:\papka"& if not "%~1"=="" set "sdir=%~1"
if not exist "%sdir%" echo folder not found "%sdir%"& pause& exit

for /f "delims=" %%a in ('dir /ad/b/s "%sdir%"') do set "d=%%a"& call :# "%%d:%sdir%\=%%"
pause& exit

:#
 setlocal enabledelayedexpansion
  set "d=%~1"
  for %%a in ("%d:\=" "%") do set "s=!s!-"
  for /f "delims=" %%a in ("%d%") do echo %s%%%~na
 endlocal
exit /b

Отправлено: 18:41, 31-10-2018 | #5


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


alpap, Мой вариант нагляднее, я напрягался чтобы сделать именно так, но, чтобы полностью соблюсти что в ТС записано, достаточно в моём варианте написать вместо
Set "Marg= "
Set "Marg="

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 19:00, 31-10-2018 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Мой вариант нагляднее »
это да, да и я видел что в Вашем коде легко привести вывод к указанному ТС.

Отправлено: 19:03, 31-10-2018 | #7


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


alpap,
Что-то в консерватории надо менять
Tree
Код: Выделить весь код
D:\CMD
└───JS_Host
    ├───Kaz_Copy_Move
    ├───WindowsScript.5v6b6626
    │   ├───Win2k_ru
    │   ├───Win9xMe
    │   └───_Docs
    ├───_Work
    │   ├───Arhiv
    │   ├───Mail
    │   │   ├───In
    │   │   └───Out
    │   ├───Protokol
    │   │   └───Arhiv
    │   ├───Report
    │   │   ├───APK
    │   │   │   ├───Obl
    │   │   │   └───Resp
    │   │   ├───Arhiv
    │   │   └───Buh
    │   │       ├───Obl
    │   │       └───Resp
    │   └───Soft
    │       ├───Arhiv
    │       ├───In
    │       └───Out
    ├───_XLS
    ├───Анализ_лог_файлов_Аргуса
    ├───Дискета_от_книги
    │   ├───Chapter01
    │   ├───Chapter02
    │   ├───Chapter03
    │   ├───Chapter04
    │   ├───Chapter05
    │   │   └───ForFind
    │   ├───Chapter06
    │   ├───Chapter07
    │   ├───Chapter08
    │   ├───Chapter09
    │   ├───Chapter10
    │   └───Chapter11
    ├───Из_интернета
    │   ├───Автоматизация работы с использованием Windows Scripting Host.files
    │   │   └───ConfRefresh.files
    │   ├───Листинг 1.files
    │   │   └───ConfRefresh.files
    │   ├───Основы WSH
    │   └───Сценарии WMI для начинающих.files
    └───Отлажено
Ваш вариант
Код: Выделить весь код
-JS_Host
--Kaz_Copy_Move
--WindowsScript
--_Work
--_XLS
--Анализ_лог_файлов_Аргуса
--Дискета_от_книги
--Из_интернета
--Отлажено
---Win2k_ru
---Win9xMe
---_Docs
---Arhiv
---Mail
---Protokol
---Report
---Soft
----In
----Out
----Arhiv
----APK
----Arhiv
----Buh
-----Obl
-----Resp
-----Obl
-----Resp
----Arhiv
----In
----Out
---Chapter01
---Chapter02
---Chapter03
---Chapter04
---Chapter05
---Chapter06
---Chapter07
---Chapter08
---Chapter09
---Chapter10
---Chapter11
----ForFind
---Автоматизация работы с использованием Windows Scripting Host
---Листинг 1
---Основы WSH
---Сценарии WMI для начинающих
----ConfRefresh
----ConfRefresh
Для продолжения нажмите любую клавишу . . .
Вообще-то у Вас много несоответствий, я показал самое простое
Моё творение
Код: Выделить весь код
D:\CMD
   -JS_Host
      --Kaz_Copy_Move
      --WindowsScript.5v6b6626
         ---Win2k_ru
         ---Win9xMe
         ---_Docs
      --_Work
         ---Arhiv
         ---Mail
            ----In
            ----Out
         ---Protokol
            ----Arhiv
         ---Report
            ----APK
               -----Obl
               -----Resp
            ----Arhiv
            ----Buh
               -----Obl
               -----Resp
         ---Soft
            ----Arhiv
            ----In
            ----Out
      --_XLS
      --Анализ_лог_файлов_Аргуса
      --Дискета_от_книги
         ---Chapter01
         ---Chapter02
         ---Chapter03
         ---Chapter04
         ---Chapter05
            ----ForFind
         ---Chapter06
         ---Chapter07
         ---Chapter08
         ---Chapter09
         ---Chapter10
         ---Chapter11
      --Из_интернета
         ---Автоматизация работы с использованием Windows Scripting Host.files
            ----ConfRefresh.files
         ---Листинг 1.files
            ----ConfRefresh.files
         ---Основы WSH
         ---Сценарии WMI для начинающих.files
      --Отлажено
Для продолжения нажмите любую клавишу . . .
В свой вариант добавил обработку входного параметра

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 31-10-2018 в 21:20.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:05, 31-10-2018 | #8


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Вообще-то у Вас много несоответствий »
все просто, у Вас неформатированный (живой, как есть) вывод, у меня нет, я это знаю и не отрицаю, но никто на этом не акцентировал внимания, хотя правильно бы, конечно, соблюсти правильный вывод и именно Ваш вариант в этом случае должен быть правильным.

Отправлено: 00:36, 01-11-2018 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - помогите пожалуйста выявить ошибку в скрипте

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Драйвер - выдает ошибку 0xc000000f помогите пожалуйста!? tenderdemy Microsoft Windows 7 4 17-02-2016 17:25
CMD/BAT - [решено] Подскажите ошибку в cmd скрипте pshik Скриптовые языки администрирования Windows 2 09-09-2015 17:14
Помогите выявить причину (регулярные бсоды) Varicapp Непонятные проблемы с Железом 3 24-08-2011 14:28
Помогите найти ошибку в скрипте Anarasius AutoIt 4 03-01-2010 21:38
[решено] Иногда компьютер зависает - помогите выявить проблему illusionmgs Непонятные проблемы с Железом 20 21-04-2009 09:53




 
Переход