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

时间:2015-04-08 01:18:32

标签: xml batch-file

我想创建一个批处理文件,用于搜索文件夹并根据.DWG文件名创建.XML文件。它还会将文件名添加到(2).XML中的差异位置(见下文)。

过程:

  1. 文件夹包含编号为A1.dwg~A100.dwg
  2. 的(100).DWG文件
  3. 批处理文件将找到这些文件名并创建相应的.XML文件
  4. 在.XML文件(2)中,将根据文件名
  5. 编辑行

    文件的XML内容" A26":

    <?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>
    

    文件的XML内容&#34; A42&#34;:

    <?xml version="1.0" encoding="UTF-8"?>
    <File Name="A42"><Version>1</Version><Description>A42</Description><Region><Cell Level="2" Division="1"/><Cell Level="2" Division="1"/></Region></File>
    

    文件的XML内容&#34; A74&#34;:

    <?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>
    

    我能够根据另一项调查将以下内容整理在一起,然而,它并不适合我......你能提供的任何东西都会非常感激。

    BTW,"targetdir=C:\USC VILLAGE"是我尝试输出这些文件的位置,但我希望能够编辑此路径,并尽可能在任何地方创建这些文件。

    @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
    

    谢谢, DOrtega

2 个答案:

答案 0 :(得分:0)

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

  • Perl也将在Windows上运行。
  • Perl处理XML比批处理更好。

要从头开始运行,您需要:

我不清楚你是如何计算出细胞水平和分裂的,所以使用了占位符值。相应地修改它应该很容易。

#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;
use File::Find;

#read search and output dirs from command line, but use defaults if not present. 
my ( $search_dir, $output_dir ) = @_;
$search_dir = 'C:\\temp\\dwg' unless defined $search_dir;
$output_dir = 'C:\\temp'      unless defined $output_dir;

sub process_file {
    return unless m/\.dwg$/;
    print "Processing $File::Find::name\n";
    my $base_name = $_;
    #extract the 'A24' bit. 
    $base_name =~ s#\.dwg$##gi;  
    print "Using $base_name\n";

    #start assembling XML:
    my $xml = XML::Twig->new( pretty_print => 'indented' );

    #create a 'File' roote element.
    $xml->set_root(
        XML::Twig::Elt->new( 'File', { "Name", $File::Find::name } ) );

    #insert Version and description into root element.
    $xml->root->insert_new_elt( 'Version',     1 );
    $xml->root->insert_new_elt( 'Description', $base_name );

    #create a region element, with subelements 'Cell'
    my $region = $xml->root->insert_new_elt( 'last_child', 'Region' );
    $region->insert_new_elt(
        'Cell',
        {   'Level'    => 1,
            'Division' => 1,
        }
    );
    $xml->print;

    open( my $output_file, ">", "$output_dir/$base_name.xml" ) or warn $!;
    print {$output_file} $xml->sprint;
    close($output_file);
}


find( \&process_file, $search_dir );

答案 1 :(得分:0)

如果<所有>(小于)和^(大于)字符echo正确在< / em>所有>"%%~dpna.xml" (命令(不在 >"%%~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

但是,我怀疑输出文件可能被强制用于 xml 编码和CLI批处理(至少在escape中阅读更多内容)。

我遵循Sobrique的建议:切换到另一个{{1}}正确处理工具......