2017-05-08 9 views
0

カット文字列私は以下のコードを使用してファイル内の文字列をカットしようとしています

for %%i in (file.txt) do @set num=%%~zi 
FOR /F "tokens=*" %%G IN (file.txt) DO (
CALL SET P=%%G:~%num%,4% 
echo (%P%) 
) 

私が唯一の最後の4つの文字を文字の数をカウントし、切断されてやっていますそのファイルを持つファイルは常に1行しか持たない。

しかし、私はこの出力を得る:~151,4

私は何ができるのでしょうか?

答えて

1

は、長さを知っている必要がありますが、Delayed Expansion

Setlocal EnableDelayedExpansion 
FOR /F "tokens=*" %%G IN (file.txt) DO (
    set "P=%%G" 
    set "p=!p:~,-4!" 
    echo !P! 
) 
EndLocal 

を必要としますが、ファイルはあなたができる唯一の人のラインを持っている場合、単純に

set /p p=<"file.txt" 
set "p=%p:~,-4%" 
echo %P% 
+0

あなたは '%pを必要とする:〜、-4%' - カンマに注意してください。 –

+0

@KlitosKyriacouあなたは正しいです、私はOP質問に誤解しました。投稿が編集されました。 – elzooilogico

+0

第二の考えでは、最初に正しいかもしれません。問題はあいまいです。 OPは最後の4文字だけに興味があるなら '%p:〜-4%'を、最後の4文字を除くすべての_exceptに興味があるならば '%p:〜、-4%'を選ぶべきです。 –

0

あなたの論理が台無しですしないでください。最後の4文字を切り捨てるだけであれば、ファイルのサイズをキャプチャする必要はありません。遅延拡張(set "line=%%G"、​​など)を有効にする必要があります。

最終行の最後の4文字だけを切り捨てて、他のすべての行を全長にしておきたい場合は、ファイル内の行数を取得し、少し異なるロジックを使用する必要があります。

@echo off & setlocal 

set "file=test.txt" 

for /f "tokens=2 delims=:" %%I in ('find /v /c "" "%file%"') do set /a linecount=%%I 

for /f "tokens=1* delims=:" %%I in ('findstr /n "^" "%file%"') do (
    if %%I lss %linecount% (
     echo(%%J 
    ) else (
     set "line=%%J" 
     setlocal enabledelayedexpansion 
     echo(!line:~0,-4! 
     endlocal 
    ) 
) 
関連する問題