ファイル内の重複行を除外し、結果をセミコロンで区切られた変数 (「配列」のようなもの) に保存するスクリプトの作成に成功しました。私はそれに対する本当の良い解決策を見つけることができませんでした。
@echo off
setlocal enabledelayedexpansion
rem test.txt contains:
rem 2007-01-01
rem 2007-01-01
rem 2007-01-01
rem 2008-12-12
rem 2007-01-01
rem 2009-06-06
rem ... and so on
set file=test.txt
for /f "Tokens=* Delims=" %%i in ('type %file%') do (
set read=%%i
set read-array=!read-array!;!read!
)
rem removes first trailing ";"
set read-array=!read-array:*;=!
echo !read-array!
for /f "Tokens=* Delims=" %%i in ('type %file%') do (
set dupe=0
rem searches array for the current read line (%%i) and if it does exist, it deletes ALL occurences of it
echo !read-array! | find /i "%%i" >nul && set dupe=1
if ["!dupe!"] EQU ["1"] (
set read-array=!read-array:%%i;=!
set read-array=!read-array:;%%i=!
)
rem searches array for the current read line (%%i) and if it does not exist, it adds it once
echo !read-array! | find /i "%%i" >nul || set read-array=!read-array!;%%i
)
rem results: no duplicates
echo !read-array!
の内容!read-array!
は2008-12-12;2007-01-01;2009-06-06
ここで、配列内の各項目を取り出して新しいファイルに書き込み、各項目の後に改行を入れたいと考えています。例:
2008-12-12
2007-01-01
2009-06-06
これが私がこれまでに思いついたものです。
私が抱えている問題は、ネストされているときに、2 番目の-loop が変数をトークン定義としてfor
受け入れないことです。ただし、ネストされていない場合!loop!
は受け入れます。%loop%
このようにしている理由は!read-array!
、アイテムの数が不明な場合があるため、それらもカウントします。何か案は?
rem count items in array
set c=0
for %%i in (!read-array!) do set /a c+=1
echo %c% items in array
for /l %%j in (1,1,%c%) do (
set loop=%%j
for /f "Tokens=!loop! Delims=;" %%i in ("!read-array!") do (
echo %%i
rem echo %%i>>%file%
)
)
exit /b