我有一个批处理文件,它将使用文件作为输入来运行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中的示例命令是:
csc /t:exe /r:MyCodeLibrary.dll;NewLib.dll *.cs
答案 0 :(得分:1)
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