使用powershell和cmd创建包含定义的.h文件

时间:2012-11-19 07:06:17

标签: windows git file powershell cmd

我是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

此外,我尝试使用帖子http://blogs.technet.com/b/heyscriptingguy/archive/2008/04/29/how-can-i-read-a-text-file-and-extract-all-the-text-enclosed-in-double-quote-marks.aspx

中的脚本

但是当我试图运行它时我遇到了问题。 我创建了文件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 ""

请帮帮我。谢谢!

1 个答案:

答案 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