Компьютерный форум 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=352617)

minutka15 18-12-2022 17:56 2999168

Создание текстовых файлов с именами папок
 
Появилась такая задача для которой необходим батник либо PowerShell который можно запустить как батник.
В директории C:\Users\Имя\AppData\Roaming\MyPrograms
имеются н-ное количество папок с различными именами и в каждой папке по одному "*.exe" файлу. Имена у всех *.exe будут разные.
После запуска скрипта нужно в папке C:\Users\Имя\AppData\Roaming\MyPrograms создать текстовые файлы с именами папок со следующим содержанием.

Код:

[ENGINE]
Name=тут имя *.exe файла без расширения .ехе
Author=Developer
Filename= тут полный путь где находится сам *.exe файл например C:\Users\имя\AppData\Roaming\MyPrograms\Folder\name.exe

Буду очень признателен за помощь.

minutka15 21-12-2022 22:42 2999454

После долгих мучений смог пройти пол пути:
Код:

@echo off
set "src=%APPDATA%\MyPrograms"
set "dest=%APPDATA%\MyPrograms"
set "files=*.exe"
set "saveto=.txt"
2>nul (md "%dest%"
for /f "delims=" %%i in ('dir/ad/b "%src%"') do >"%dest%\%%i%saveto%" dir/a-d/b/s "%src%\%%i\%files%")
exit

Tекстовые файлы создаются с учетом их присутствия в папках таким образом:
C:\Users\имя\AppData\Roaming\MyPrograms\FolderName\FileName.exe
мне необходимо что-бы в начале пути стояло:
Filename=C:\Users\имя\AppData\Roaming\MyPrograms\FolderName\FileName.exe
и еще прописать в каждом создаваемом файле в самом верху
[ENGINE]
а потом уже
Filename=C:\Users\имя\AppData\Roaming\MyPrograms\FolderName\FileName.exe

Может кто выручить ?

megaloman 22-12-2022 16:59 2999532

Код:

@Echo Off
cls
>nul chcp 1251
        Set "BoxIn=%APPDATA%\MyPrograms"
        Set "Mask=*.exe"
        Set "Ext=txt"

        If Not Exist "%BoxIn%\" (Echo "%BoxIn%" Not found &Pause &Exit /B 2)

        For /D %%d In ("%BoxIn%\*.*") Do (
                For %%f In ("%%d\%Mask%") Do (
                        >"%BoxIn%\%%~nxd.%Ext%" (
                                Echo [ENGINE]
                                Echo %%~nf
                                Echo Author=Developer
                                Echo Filename=%%f
                        )
                )
        )
pause
Exit /B


minutka15 22-12-2022 17:26 2999535

Вот супер!

тут дописал
Echo [ENGINE]
Echo Name=%%~nf
Echo Author=Developer
Echo Filename=%%f

Получилось именно то что было задумано!
Благодарю!

minutka15 14-04-2024 17:11 3026488

Цитата:

Цитата megaloman
@Echo Off
cls
>nul chcp 1251
Set "BoxIn=%APPDATA%\MyPrograms"
Set "Mask=*.exe"
Set "Ext=txt"
If Not Exist "%BoxIn%\" (Echo "%BoxIn%" Not found &Pause &Exit /B 2)
For /D %%d In ("%BoxIn%\*.*") Do (
For %%f In ("%%d\%Mask%") Do (
>"%BoxIn%\%%~nxd.%Ext%" (
Echo [ENGINE]
Echo %%~nf
Echo Author=Developer
Echo Filename=%%f
Echo [OPTIONS]
Echo UCI_Chess960=true
)
)
)


pause
Exit /B »


Уважаемый megaloman
Скрипт работает на ура но если возможно его доработать было-бы супер.
Вот эта строка Echo Filename=%%f создает небольшую проблему а именно:
в полученном файле появляется весь путь от ехе-шника а хотелось бы урезать следующим образом:
К примеру с этим батником я получаю результат

Код:

[ENGINE]
Name=Weiss 2.1 pext
Author=Developer
Filename=C:\Users\имя\AppData\Roaming\ChessBase\Engines.UCI\Weiss_2.1\Weiss 2.1 pext.exe
[OPTIONS]
UCI_Chess960=true

а хотелось бы укоротить строчку таким образом:
Код:

Filename=.\Weiss_2.1\Weiss 2.1 pext.exe
Я могу делать так: Echo Filename=.\Weiss_2.1\%%~nf.exe и получаю что хочу, однако имена папок всегда разные.
Как бы определить и прописать путь только той папки где лежит .exe файл?

megaloman 14-04-2024 20:18 3026493

Код:

@Echo Off
cls
>nul chcp 1251
        Set "BoxIn=%APPDATA%\MyPrograms"
        Set "Mask=*.exe"
        Set "Ext=txt"

        If Not Exist "%BoxIn%\" (Echo "%BoxIn%" Not found &Pause &Exit /B 2)

        For /D %%d In ("%BoxIn%\*.*") Do (
                For %%f In ("%%d\%Mask%") Do (
                        >"%BoxIn%\%%~nxd.%Ext%" (
                                Echo [ENGINE]
                                Echo Name=%%~nf
                                Echo Author=Developer
                                Echo Filename=.\%%~nxd\%%~nxf
                        )
                )
        )
pause
Exit /B


minutka15 14-04-2024 20:42 3026494

megaloman,

Отлично.
Я всякий раз после запуска скрипта в ручную редактировал эту строчку в сотнях файлов.
Огромное спасибо!


Время: 14:16.

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