batch-file - 用于读取输入文本文件并构建输出命令的批处理脚本
问题描述
我有一个批处理文件,它将csc
使用文件作为输入运行。我想修改它以从文件中读取引用,并将它们添加到脚本运行时执行的行中。
我尝试了一些不同的东西,但似乎无法让它发挥作用。添加引用/r:
,然后每个引用路径都有分号作为分隔符。
理想情况下,我只想在文本文件的新行上有一个引用。该ref.txt
文件与输入文件位于同一目录中,我不确定它是否在此目录中查找。我还想让它尝试在没有ref.txt
文件的情况下运行,所以我添加了 exists 行来做到这一点。我以前从未使用过批处理脚本,所以也许其他人比我更清楚如何做到这一点。我认为第一行需要与起始行匹配,我在其他尝试中尝试过,但它不起作用。
该脚本在 Notepad++ 中工作,来自这个答案。我认为现在运行命令也需要修改。
这是 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
解决方案
IIUR 您正在尝试将 refs 应用于已编译的 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
推荐阅读
- python - 将密码存储在 pyspark 脚本中的文件中
- sql - Laravel 字段没有默认值
- perl - Perl <<= and ^= Meaning
- c# - 具有相同登录名的多个数据库(.net core 3 API)
- javascript - Array.filter() 在 Vue.js 中无法正常工作
- laravel - Undefined variable in table.blade.php of job in laravel
- python - defining member functions within __init__
- python - AttributeError: 'FirefoxProfile' 对象没有属性 'update' 错误使用 FirefoxProfile 通过 Selenium 和 Python
- java - 为我的 Spring Boot 应用程序创建一个默认的安全登录页面
- reactjs - How to handle dropdown data and fetched English data when my user choose another language?