ITPub博客

首页 > Linux操作系统 > Linux操作系统 > windows批处理之四:特殊的字符串截取及结合perl的操作

windows批处理之四:特殊的字符串截取及结合perl的操作

原创 Linux操作系统 作者:regonly1 时间:2010-12-06 11:36:47 0 删除 编辑
截取字符串在前面二中已经讲过,现在回顾一下:
%str:~1%:表示截取从第二个字符开始的所有后续字符
%str:~1,10%:表示截取第二个字符开始,长度为10个字符的字符串
下面,是特殊的字符串截取用法:
有个特殊的要求,假如有个文件名,叫: regonly1.bat
现在我想截取他的文件类型部分,即:.bat部分。该如何取?于是就有下面的用法:
%str:~-4%
那如何截取文件名部分,即不包含文件类型的那个部分呢?也就是说要取:regonly1几个字符,则可以这么做:
%str:~0,-4%
测试:
设置变量值:
C:\Documents and Settings\wanghf>set str=regonly1.bat
打印:
C:\Documents and Settings\wanghf>echo %str%
regonly1.bat
截取字符后四位:
C:\Documents and Settings\wanghf>echo %str:~-4%
.bat
去掉字符串中的后四位:
C:\Documents and Settings\wanghf>echo %str:~0,-4%
regonly1
下面是一个去除PL/SQL中注释的脚本:
@rem = '

@echo Modified by wanghf@2010-12-06
@echo Created by wanghf@2010-07-28
@echo ----------------------------------------
@echo Bug请联系我:wanghf@hundsun.com
@echo ----------------------------------------
@echo 说明:
@echo 本脚本用于清除SQL型的注释
@echo 以下情况符合:
@echo 1. 以“--”开始的行注释
@echo 2. 以/*...*/包围的块注释(包括任意换行)
@echo 3. 不会清除sql中的hint。如:/*+index*/
@echo 4. 会清除单引号中的行注释(只删除引号内的)
@echo ----------------------------------------

@echo off
set /p filename="输入文件名:"
set encryfile=%filename:~0,-4%
perl -S cmtclear.bat %filename% > %encryfile%.encry
goto endofperl
@rem ';

#!/usr/bin/perl
use strict;
#use warnings;

my $str = "";
my $copy= "";
my $f   = $ARGV[0];
my $flag;

open(FILE, "<$f") ||die "Can not open file: $f";
foreach $str(){
    $copy = $str;
    $str =~s/([^'-]*)[-]{2,}([^']*)/\1/g;
    $str =~s/\/\*[^+]*\*\///g;
    if ($str =~/\/\*[^+\/]+$/){
        $flag=1;
    }
    if ($str =~/^[^\/+]+\*\//){
        $flag=0;
    }

    if ($flag == 1 && $str !~/\/\*[^+\/]+$/){
        $str ="";
    }
    $str =~s/\/\*[^+\/]+$//g;
    $str =~s/^[^\/+]+\*\///g;

    print $str;
}
close FILE;


exit (1);
__END__
: endofperl

中间嵌套了perl的代码部分。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-680967/,如需转载,请注明出处,否则将追究法律责任。

上一篇: mymap-china
请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1069893