Пакетный файл: список всех файлов в каталоге последовательно с отступом - PullRequest
1 голос
/ 23 сентября 2019

Я новичок в написании командных файлов, и я пытаюсь реализовать выходной файл так:

C:\
---Folder1
      ---files
      ---files
---Folder2
      ---files
I also want the path of each file

Попробовал использовать / tree, но мне нужен вывод в текстовом файле.Я не хочу использовать / дерево, потому что появятся строки.Я хочу разобрать файлы в фрейм данных.Следовательно, я не хочу никаких символов или стрелок.Мне нужно использовать пробелы.

1 Ответ

0 голосов
/ 24 сентября 2019

Первое решение, основанное на комментарии @Ken White, по его словам, tree /A отлично работает и правильно отображается в блокноте со шрифтом Consolas по умолчанию.

@echo off
Set "PathFolder=C:\temp"
Set "LogFile=C:\temp\Tree_Result.txt"
Rem simply pipe tree output to skip the two lines in the header
Tree "%PathFolder%" /F /A | more +2>"%LogFile%" 
If Exist "%LogFile%" Start "" "%LogFile%"

Вывод выглядит так:

C:\TEMP
|   1155.tif
|   check.txt
|   filetest.txt
|   InitJsonInSvc.dat
|   InitJsonOutSvc.dat
|   test.txt
|   Tmp_Output.txt
|   Tree_Output.txt
|   Tree_Result.txt
|   
+---Exiland Backup
|       parametre.ini
|       
\---Test
    |   parametre.ini
    |   
    +---Exiland Backup
    |       parametre.ini
    |       
    \---Nouveau dossier
            b.txt
            c.txt
            parametre.ini
            vide.ini

Второе решение, которое я создал и протестировал на своей французской версии windows 10 (32 бита), похоже на гибридный код:

<!-- :
@echo off
Title Replace unwanted Characters in the command Tree and save it into file by Hackoo 2019
setlocal enableExtensions enableDelayedExpansion
::ÿþ
set "cp="
for /F "tokens=2 delims=:." %%a in ('chcp') do set "cp=%%~a"
if not defined cp set "cp=850"
>nul chcp 65001

Set "PathFolder=C:\temp"
Set "TmpFile=C:\temp\Tmp_Output.txt"
Set "LogFile=C:\temp\Tree_Output.txt"

PowerShell ^
Tree "!PathFolder!" /F ^| Select-Object -Skip 2 ^| Set-Content !TmpFile! -Encoding unicode;
cscript //nologo "%~f0?.wsf" //job:ReplaceString "!TmpFile!" "�" " ">"!LogFile!"
If Exist "!LogFile!" Start "" "!LogFile!"
endlocal
>nul chcp %cp%
exit /b
--->
<job id="ReplaceString">
    <script language="Vbscript">
    Dim fso,File,Char,ReplaceChar,ReadAll
    Set FSO = CreateObject("Scripting.FileSystemObject") 
    InputFile=WScript.Arguments(0)
    Char=WScript.Arguments(1)
    ReplaceChar=WScript.Arguments(2)
    Set oFile = FSO.OpenTextFile(InputFile, 1, False, -1)
    strData = oFile.ReadAll
    WScript.echo(Replace(strData,Char,ReplaceChar))
    </script>
</job>

Так что яполучил в качестве выходного текста, как это:

C:\TEMP
    1155.tif
    check.txt
    filetest.txt
    InitJsonInSvc.dat
    InitJsonOutSvc.dat
    test.txt
    Tree_Result.txt

    Exiland Backup
        parametre.ini

    Test
        parametre.ini

        Exiland Backup
            parametre.ini

        Nouveau dossier
            b.txt
            c.txt
            parametre.ini
            vide.ini
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...