2016-08-08 8 views
2

です。バッチスクリプトに新しいIamがあります。ここでは、テキストファイルを100万行ごとに分割してみました。 チャンクファイルは、期待どおりに生成されますが、出力ファイルのコンテンツには感嘆符(!)がありません。また、感嘆符の後の直後の列をスキップしています。元のファイルにあるようにデータをチャンクに入れるのを助けてください!バッチスクリプトを使ってtxtファイルを分割している間に、感嘆符は

@ECHO OFF 
setLocal DisableDelayedExpansion 

set limit=1000000 
set feed_name=test.txt 
set file=%Tgt_Dir%\%feed_name% 
set lineCounter=1 
set filenameCounter=1 
set name= 
set extension= 


for %%a in (%file%) do (
    set "name=%%~na" 
    set "extension=%%~xa" 
) 

setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in (%file%) do (
    set splitFile=!name!%date:~12,2%%date:~4,2%%date:~7,2%!filenameCounter!!extension! 
    if !lineCounter! gtr !limit! (
     set /a filenameCounter=!filenameCounter! + 1 
     set lineCounter=1 
     echo Created !splitFile!. 
    ) 
    echo %%a>> %Tgt_Dir%\!splitFile! 

    set /a lineCounter=!lineCounter! + 1 
) 
endlocal 

タブ区切りファイルです。

スクリーンショットが enter image description here

答えて

1

あなたは遅れて展開を切り替える必要があります。

setlocal DisableDelayedExpansion 
for /f "tokens=*" %%a in (%file%) do (
    Set "line=%%a" 
    setlocal EnableDelayedExpansion 

     set splitFile=!name!%date:~12,2%%date:~4,2%%date:~7,2%!filenameCounter!!extension! 

     echo(!line!>> %Tgt_Dir%\!splitFile! 

    if !lineCounter! gtr !limit! (
     ENDLOCAL 
     set /a filenameCounter+=1 
     set lineCounter=1 
     echo Created file 
    ) ELSE ENDLOCAL 
    set /a lineCounter=lineCounter + 1 
) 
+0

あなたの提案に本当に感謝していますが、私もこの問題について別のスレッドを読んでいます。 [リンク](http://stackoverflow.com/questions/10964923/reading-a-file-with-special-characters-in-batch) 上記の変更を行った後も、私はまだエラーが発生しています - 今チャックが作成中です**%A ** – CIPHER

+0

を表示している各行とコンテンツについて@CIPHER '%% a'の代わりに' %% A'を書きましたが、今修正しました。また、line'if!lineCounter!のバグ! gtr!限度!遅延拡張が有効になっている必要があります。したがって、比較の直後にエンドローカルを移動し、ELSEの部分にも移動しました。 – jeb

+0

ありがとうございました。最初は%% Aへのアクセスに問題がありましたが、結果を得る。 – CIPHER

関連する問題