Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
批处理脚本-创建一个.XML文件-基于文件夹中的每个.DWG文件名_Xml_Batch File - Fatal编程技术网

批处理脚本-创建一个.XML文件-基于文件夹中的每个.DWG文件名

批处理脚本-创建一个.XML文件-基于文件夹中的每个.DWG文件名,xml,batch-file,Xml,Batch File,我想创建一个批处理文件,用于搜索文件夹并基于.DWG文件名创建.XML文件。它还会将文件名添加到.XML中的两个不同位置,请参见下文 过程: 文件夹包含100个编号为A1.DWG~A100.DWG的.DWG文件 批处理文件将找到这些文件名并创建相应的.XML文件 在.XML文件中,将根据文件名编辑2行 文件A26的XML内容: <?xml version="1.0" encoding="UTF-8"?> <File Name="A26"><Version>1&

我想创建一个批处理文件,用于搜索文件夹并基于.DWG文件名创建.XML文件。它还会将文件名添加到.XML中的两个不同位置,请参见下文

过程:

文件夹包含100个编号为A1.DWG~A100.DWG的.DWG文件 批处理文件将找到这些文件名并创建相应的.XML文件 在.XML文件中,将根据文件名编辑2行 文件A26的XML内容:

<?xml version="1.0" encoding="UTF-8"?>
<File Name="A26"><Version>1</Version><Description>A26</Description><Region><Cell Level="1" Division="1"/><Cell Level="1" Division="1"/></Region></File>
谢谢,
多特加

我知道这不是你想要的,但无论如何我都会提供。这是perl,而不是批处理,因为:

Perl也将在Windows上运行。 Perl处理XML的能力比batch要好得多。 要让它“从头开始”运行,您需要:

从以下位置安装perl: 安装XML::Twig-如果您通过ppm运行Activeperl,请安装XML Twig。 我不清楚您是如何计算单元级别和划分的,所以使用了占位符值。对其进行相应的修改应该很容易

!/usr/bin/perl 严格使用; 使用警告; 使用XML::Twig; 使用File::Find; 从命令行读取搜索和输出目录,但如果不存在,则使用默认值。 我的$search\u dir、$output\u dir=@; $search\u dir='C:\\temp\\dwg',除非定义了$search\u dir; $output\u dir='C:\\temp',除非定义了$output\u dir; 子进程文件{ 返回,除非m/\.dwg$/; 打印处理$File::Find::name\n; 我的$base\u name=$\u; 提取“A24”位。 $base_name=~s\.dwg$gi; 使用$base\u名称打印\n; 开始组装XML: my$xml=xml::Twig->new pretty_print=>“缩进”; 创建一个“File”roote元素。 $xml->set\u root XML::Twig::Elt->new'File',{Name,$File::Find::Name}; 在根元素中插入版本和说明。 $xml->root->insert_new_elt'Version',1; $xml->root->insert_new_elt'Description',$base_name; 创建一个区域元素,子元素为“Cell” my$region=$xml->root->insert_new_elt'last_child'、'region'; $region->insert_new_elt “细胞”, {“级别”=>1, “除法”=>1, } ; $xml->print; 打开我的$output\u文件>,$output\u dir/$base\u name.xml或warn$!; 打印{$output_file}$xml->sprint; 关闭$output_文件; } 查找\处理\文件,$search\u dir;
如果在>%%~dpna.xml行以外的所有echo命令中正确使用^Escape character,则脚本可以工作,如下所示:

  >"%%~dpna.xml" (
    ECHO(^<?xml version="1.0" encoding="UTF-8"?^>
    ECHO(^<File Name="%%~na"^>
    ECHO(    ^<Version^>1^</Version^>
    ECHO(    ^<Description^>%%~nxa^</Description^>
    ECHO(^</File^>
   )
但是,我怀疑输出文件是否可以强制使用UTF-8编码,至少CLI批处理读取更多


我将遵循Sobrique的建议:切换到另一个正确处理xml的工具…

该工具来自哪里?为什么所有XML内容的描述都要加倍?它必须是批处理的吗?或者例如,在Windows上工作的perl是一个选项吗?我问的原因-XML比看起来要复杂得多,使用合适的解析器有很大帮助。@JosefZ-我必须确认单元格级别和划分,以及它们是否重复。这些与AutoCAD直接相关。此信息告诉AutoCAD文件与哪个级别(例如级别3)和分区(例如区域)关联4@JosefZ-我确认这是重复的。我不知道为什么,但同样,这是一个AutoCAD的东西。-批处理用于创建XML,只是因为它不需要额外的程序来安装和/或为其他团队成员学习。我非常感谢您对我的帮助,并将进一步研究。不过,我希望暂时坚持批处理文件。这很公平。不过我要警告你,你是在自食其果。XML是一个复杂的结构,解析它并不是一件小事。我不想让它——不能——成批完成,但它很容易被非常严格的数据格式绊倒。
<?xml version="1.0" encoding="UTF-8"?>
<File Name="A74"><Version>1</Version><Description>A74</Description><Region><Cell Level="3" Division="1"/><Cell Level="3" Division="1"/></Region></File>
@ECHO OFF
SETLOCAL
SET "targetdir=C:\USC VILLAGE"
SET /a filecount=0
SET "and_subdirs="
:again
PUSHD "%targetdir%"
FOR %and_subdirs% %%a IN (
  "*.dwg"
 ) DO (
  SET /a filecount+=1
  >"%%~dpna.xml" (
   ECHO(^<?xml version="1.0" encoding="UTF-8"?>
   ECHO(         <File Name="%%~na">
   ECHO(         <Version>1</Version>
   ECHO(         <Description>%%~nxa"</Description>
   ECHO(         </File^>
  )
  )
  )
)
popd
IF NOT DEFINED and_subdirs IF %filecount%==0 SET "and_subdirs=/r"& GOTO again
ECHO(%filecount% files found
IF DEFINED and_subdirs ECHO(Subdirectories were scanned

GOTO :EOF
  >"%%~dpna.xml" (
    ECHO(^<?xml version="1.0" encoding="UTF-8"?^>
    ECHO(^<File Name="%%~na"^>
    ECHO(    ^<Version^>1^</Version^>
    ECHO(    ^<Description^>%%~nxa^</Description^>
    ECHO(^</File^>
   )