0

すべての行の先頭から最初の 12 文字を切り取る必要があるテキスト ファイルがいくつかあります (そしてこれからも)。理想的には、ファイルの名前とパスを入力し、スクリプトを実行し、ファイルが同じ名前と場所、または同じ場所を保持し、ファイル名の末尾に「_clean」を追加するバッチ ファイルが必要です。 . または、txt ファイルをバッチ ファイルにドロップすると、上記の 2 つのいずれかが発生します。

これは可能ですか?

これらの例に近づくことができるようです:

http://social.technet.microsoft.com/Forums/nl/ITCG/thread/2a14d04c-c38b-4a89-95a2-e24aa586849c

Windows バッチを使用してファイルから末尾のスペースを削除しますか?

編集

誰かが私がこの点に到達するのを助けました:

@echo off 
setlocal enableextensions 
set INFN=%~1 
set OUTFN=%INFN%_clean 
if exist "%OUTFN%" del "%OUTFN%" 
for /f "tokens=1*" %%c in ('type "%INFN%"') do ( 
>> "%OUTFN%" echo %%c %%d 
) 
endlocal

2 つの問題:

1) 最初の 12 文字にはいくつかのテキストがあるので、最初の 12 文字を切り刻む何かが必要です。

すべての行は 2 ~ 3 文字で始まり、次のように 9 ~ 10 個のスペースが続きます。

99*10spaces*Text 

また

100*9spaces*Text 

テキスト部分だけが必要です

2) 出力ファイルが保存されると、ファイル拡張子が非表示になっていても、.txt 拡張子に _clean が追加されて保存されます。

4

4 に答える 4

1

入力ファイルのすべての行の最初の 12 文字だけを切り取る場合はcutUnxUtilsの http://unxutils.sourceforge.net/が役に立ちます。

cut --helpこの単純な1行のbatファイルを見て、試してみてください

cut -c13- %1 >%~dpn1_CLEAN%~x1
于 2012-08-01T16:10:54.540 に答える
1

ネイティブのバッチ コマンドを使用して各行をトリミングする方法を次に示します。

アップデート

出力ファイル名を作成するようにコードを変更しました。

@ECHO OFF

SETLOCAL EnableExtensions EnableDelayedExpansion

SET INFN=%1
SET OUTFN=%~n1_clean%~x1

IF EXIST "%OUTFN%" DEL "%OUTFN%"

FOR /F "tokens=* usebackq" %%c IN (%INFN%) DO (
  SET RESULT=%%c
  SET RESULT=!RESULT:~12!
  REM Displays the trimmed line in the console window
  ECHO !RESULT!
  REM Writes the trimmed line to the output file
  ECHO !RESULT!>>"%OUTFN%"
)

ENDLOCAL
于 2012-08-01T19:18:38.637 に答える
0

私はこの質問を別のウェブサイトに出しました。

@echo off
if not exist "%~1" (echo Error & pause & exit /b 1) 
echo do until wsh.stdin.atendofstream:wsh.echo mid(wsh.stdin.readline, 9):loop> %temp%\_t.vbs
more /T8 < "%~1" | cscript //nologo %temp%\_t.vbs > "%~dpn1_clean%~x1"
del %temp%\_t.vbs
del %1

みんなの助けに感謝します。

于 2012-08-02T18:05:03.947 に答える