Пакетный скрипт для чтения входного текстового файла и построения выходной команды - PullRequest
0 голосов
/ 25 января 2019

У меня есть командный файл, который будет запускаться csc с использованием файла в качестве ввода.Я хочу изменить его так, чтобы он считывал ссылки из файла и добавлял их в строку, выполняемую при запуске сценария.

Я пробовал несколько разных вещей, но, похоже, он не работает.Ссылки добавляются с помощью /r:, а затем каждый путь ссылки имеет точку с запятой в качестве разделителя.

В идеале, я хотел бы просто добавить ссылку на новую строку в текстовом файле.Файл ref.txt находится в том же каталоге, что и входной файл, и я не уверен, просматривал ли он этот каталог или нет.Я также хочу попытаться запустить его без файла ref.txt, поэтому для этого я добавил строку существующие.Я никогда раньше не использовал пакетные скрипты, поэтому, может быть, кто-то другой знает, как сделать это лучше меня.Я думаю, что первая строка должна соответствовать стартовой строке, что я пытался сделать в других попытках, но она не работала.

Скрипт работает в Notepad ++ и был из этого answer .Теперь я думаю, что команду run также нужно изменить.

Это команда запуска в Notepad ++:

C:\bin\csc.bat "$(CURRENT_DIRECTORY)\$(NAME_PART).exe" "$(FULL_CURRENT_PATH)"

Это версия из этого ответа:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc /out:%1 %2

@echo off

if errorlevel 1 (
    pause
    exit
)

start %1 %1

Это попытка использовать ссылки:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc /out:%1 %2

@echo off

if errorlevel 1 (
    pause
    exit
)

if not exist ref.txt GOTO :write
set a = /r:
set refs = type ref.txt
start %1 %a% and %refs% and %1
exit
write
start %1 %1

Файл refs.txt содержит следующие пути к файлам:

C:\windows\some_path\some_file.dll;C:\windows\some_path\another_file.dll;

Пример команды от Microsoft is:

csc /t:exe /r:MyCodeLibrary.dll;NewLib.dll *.cs

1 Ответ

0 голосов
/ 25 января 2019

IIUR вы пытаетесь применить ссылки к скомпилированному exe, а не к csc.

Вам нужно адаптировать путь к файлу ref.txt

:: Q:\Test\2019\01\25\SO_54360791.cmd
@echo off & Setlocal EnableDelayedExpansion
Set CSC="C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
Set Ref=".\ref.txt"

if exist %Ref% (
    <%Ref% Set /p "refs="
    set "refs=/r:!refs!"
) else set "refs="

%CSC% %refs% /out:%1 %2
if errorlevel 1 (
    pause
    exit
)

образец (эхо) выход

> SO_54360791.cmd new.exe source.cs
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /r:C:\windows\some_path\some_file.dll;C:\windows\some_path\another_file.dll; /out:new.exe source.cs

Я не уверен, будет ли конечная точка с запятой в вашем образце ref.txt работать.

РЕДАКТИРОВАТЬ: вариант с файлом ref.txt, содержащим цитируемые пути с завершающим полуклоном

:: Q:\Test\2019\01\25\SO_54360791.cmd
@echo off & Setlocal EnableDelayedExpansion
Set CSC="C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe"
Set Ref=".\ref.txt"
Set "refs="
if not exist %Ref% goto :cont
set "refs=/r:"
for /f "usebackq delims=" %%A in (%Ref%) Do set "refs=!refs!%%A"

:cont
echo %CSC% %refs% /out:%1 %2
if errorlevel 1 (
    pause
    exit
)
goto :Eof

образец (эхо) выход

> SO_54360791.cmd new.exe source.cs
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /r:"C:\windows\some_path\some_file.dll";"C:\windows\some_path\another_file.dll"; /out:new.exe source.cs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...