我想创建一个批处理文件,用于搜索文件夹并根据.DWG文件名创建.XML文件。它还会将文件名添加到(2).XML中的差异位置(见下文)。
过程:
文件的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
答案 0 :(得分:0)
我知道这不是你所要求的,但无论如何我都会提供它。它是perl,而不是批处理,因为:
要从头开始运行,您需要:
XML::Twig
- 如果您通过ppm install XML-Twig
运行Activeperl。 我不清楚你是如何计算出细胞水平和分裂的,所以使用了占位符值。相应地修改它应该很容易。
#!/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}}正确处理工具......