1

不知道这里有什么合适的标签......

不久前,我创建了一个批处理脚本,它在运行时将使用 Microsoft Windows SDK 中的 xsd.exe 文件(此处使用 v6.1)将 C:\api\ 中的所有 .xsd 文件转换为 C# 类。

@ECHO OFF
CLS
ECHO ***
ECHO Runs xsd.exe on all *.xsd files sorted by filename in the current folder.
ECHO ***

FOR /R "C:\api" %%G IN (*.xsd) DO (
  @ECHO ON
  "C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\xsd.exe" "C:\api\base\base.xsd" "%%G" /c /n:Mynamespace /o:"C:\api"
  @ECHO OFF
)

问题是……我有 50 个左右生成的 .cs 文件,包括基类。在每一个内部,它都会生成一个基类的副本,所以我最终在每个类中都有一个基类,而我只需要它在一个类中。

有没有一种方法可以防止在每个类中都没有基类的情况下生成类?我仍然希望创建基类(base.cs),但不是在其他 49 个类中。

编辑:

我尝试了以下方法:

@ECHO OFF
SET str1=
FOR /R "C:\api" %%G IN (*.xsd) DO (
  SET str1="%%G" %str1%
)

ECHO %str1%

返回的响应始终是列表中的最后一个文件。

4

2 回答 2

2

您可以一次传递多个 XML 模式文件,xsd.exe而不是遍历文件并分别传递每个文件。正在传递的模式文件列表不会是动态的......

此外,这只会创建一个 .cs 文件,以列表中的第一个 XML 模式文件命名,包含所有类。

于 2009-11-25T13:33:31.780 回答
2

对于第二个问题,您必须设置延迟扩展

并使用!str!而不是%str%

试试这个

SETLOCAL enabledelayedexpansion
@ECHO OFF
SET str1=
FOR /R "C:\api" %%G IN (*.xsd) DO (
  SET str1="%%G" !str1!
)
ECHO !str1!
于 2009-11-25T17:03:21.313 回答