windows批處理之四:特殊的字串擷取及結合perl的操作

regonly1發表於2010-12-06
擷取字串在前面二中已經講過,現在回顧一下:
%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, "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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章