我是powerbhell和cmd中的新手,抱歉。 我正在尝试编写可以生成如此定义的脚本
#define VERSION "a89aa153a054b865c0ef0a6eddf3dfd578eee9d2"
在VERSION中我想从下一个源
设置参数.git\refs\heads\project
我尝试了下一个cmd脚本,但我遇到了“角色,我无法逃避它”的问题
echo #define VERSION \" > ver.h
type .git\refs\heads\project >> ver.h
echo \" >> ver.h
中的脚本
但是当我试图运行它时我遇到了问题。 我创建了文件writeDefine.ps1
Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("D:\Scripts\DefineTemplate.txt", ForReading)
Do Until objFile.AtEndOfStream
strText = ""
strCharacter = objFile.Read(1)
If strCharacter = Chr(34) Then
Do Until objFile.AtEndOfStream
strNewCharacter = objFile.Read(1)
If strNewCharacter = Chr(34) Then
Exit Do
End If
If strNewCharacter <> "" Then
strText = strText & strNewCharacter
End If
Loop
Wscript.Echo strText
End If
Loop
objFile.Close
我想阅读模板并在“字符之间插入VERSION并将该文本写入”ver.h“,但是 我有一个错误
D:\writeHeader.ps1:4 symbol:67
+ Set objFile = objFSO.OpenTextFile("D:\Scripts\DefineTemplate.txt", <<<< ForReading)
+ CategoryInfo : ParserError: (,:String) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingExpressionAfterToken
DefineTemplate.txt
#define VERSION ""
请帮帮我。谢谢!
答案 0 :(得分:2)
脚本示例是VBScript,而不是Powershell。因此,您无法在Powershell上执行它。但是,您可以通过调用cscript
来执行它。还有wscript
执行VBScript,但它用于图形:弹出窗口等。将文件重命名为.vbs
并运行它。像这样,
cscript d:\writeHeader.vbs
Cmd.exe使用hat char作为转义。像这样,
C:\temp>echo #define VERSION ^" > ver.h
C:\temp>type ver.h
#define VERSION "
编辑:根据如何在一行上创建标题,必须调用一些技巧。在Powershell中这会更简单,但是这里也是如此。
:: Assume git data is in git.dat and it doesn't contain a newline
echo ^"> quote.txt
<nul set /p d=#define VERSION ^"> ver.h
copy /y ver.h+git.dat+quote.txt ver2.h
type ver2.h
#define VERSION "0x000..."
......但我仍然会在Powershell中这样做。像这样,
$git = cat .git\refs\heads\project # Read the git project file
$str = $("#define VERSION `"{0}`"" -f $git) # Build a formatted string
set-content -LiteralPath ver.h -value $str # Write the string to a file