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

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

krisetta 23-10-2018 21:14 2837267

помогите пожалуйста выявить ошибку в скрипте
 
вот мое задание. создать файл 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 не являются внешними или внутренними командами и что непредвиденное появление пути

megaloman 23-10-2018 21:47 2837272

Код:

@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


krisetta 31-10-2018 15:45 2838661

Цитата:

Цитата megaloman (Сообщение 2837272)
Код:

@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
где каждый знак - обозначает степень вложенности файла

megaloman 31-10-2018 18:35 2838713

Код:

@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


alpap 31-10-2018 18:41 2838715

предложу и свой вариант, тут форматирование немного другое, но именно как у ТС записано:
Код:

@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


megaloman 31-10-2018 19:00 2838726

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

alpap 31-10-2018 19:03 2838727

Цитата:

Цитата megaloman
Мой вариант нагляднее »

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

megaloman 31-10-2018 20:05 2838743

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
      --Отлажено
Для продолжения нажмите любую клавишу . . .

В свой вариант добавил обработку входного параметра

alpap 01-11-2018 00:36 2838798

Цитата:

Цитата megaloman
Вообще-то у Вас много несоответствий »

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


Время: 13:44.

Время: 13:44.
© OSzone.net 2001-