가능한 경우 PowerShell을 피하려고합니다.CSV에서 공백을 제거하는 일괄 처리 명령
Windows 배치 명령을 사용하여 텍스트 CSV 파일 (열 수는 다를 수 있음)을 읽는 방법을 찾고 공백을 잘라냅니다. 선행 및 후행 공백이 이동해야하지만, 나머지는 사전에
감사를 보존해야 당신이 공간을 을 제거한다고 가정
가능한 경우 PowerShell을 피하려고합니다.CSV에서 공백을 제거하는 일괄 처리 명령
Windows 배치 명령을 사용하여 텍스트 CSV 파일 (열 수는 다를 수 있음)을 읽는 방법을 찾고 공백을 잘라냅니다. 선행 및 후행 공백이 이동해야하지만, 나머지는 사전에
감사를 보존해야 당신이 공간을 을 제거한다고 가정
- 끝 라인 의 시작 - 전
내가 생각 어떤 분리 후 구분 기호는 파일을 통해 일관성이 있으므로 매개 변수 대신 스크립트 내부에서 사용하십시오. 스크립트는 값 내에 분리 문자가 없다고 가정합니다 (문자열과 함께 발생할 수 있음). 더 많은 특수 문자 (예 : 탭)를 처리해야하는 경우 일치하는 블록을 추가해야합니다. ! delayed expansion을 사용할 때 %를 대체하십시오. 변수가 하위 블록에서 잘 파싱되도록이 작업을 수행해야했습니다.
설명 :
각 줄마다 각 경우를 확인하십시오.
사례가 발견되는 동안 사례가 반복됩니다. 내가 설명하는 매우 좋은하지 않을 수 있으므로 자세한 내용은 물어 괜찮다 HTH
@echo off
setlocal enabledelayedexpansion
:: Remove spaces from csv
:: ARGS:
:: 1 : file name of the CSV file
set _SEP=;
dir /b %1 2>&1 >nul
if ERRORLEVEL 1 echo ERROR : File not found & goto :EOF
del %1.trimmed 2>nul
for /f "delims=%_SEP% tokens=*" %%L in (%1) do (
echo before: %%L
set _LINE=%%L
call :CHECK_BEFORE
call :CHECK_AFTER
call :CHECK_BEGIN
call :CHECK_END
echo !_LINE! >> %1.trimmed
)
echo END of TRIM
echo output is in %1.trimmed
goto :EOF
:TRIM_BEFORE_SEP
set _LINE=!_LINE: ;=;!
goto :EOF
:TRIM_AFTER_SEP
set _LINE=!_LINE:; =;!
goto :EOF
:TRIM_BEGIN
set _LINE=!_LINE:~1!
goto :EOF
:TRIM_END
set _LINE=!_LINE:~0,-1!
goto :EOF
:CHECK_BEFORE
echo !_LINE! | findstr /C:" ;"
if %ERRORLEVEL% == 0 call :TRIM_BEFORE_SEP & goto CHECK_BEFORE
echo End Step: Trim Before Sep
goto :EOF
:CHECK_AFTER
echo !_LINE! | findstr /C:"; "
if %ERRORLEVEL% == 0 call :TRIM_AFTER_SEP & goto CHECK_AFTER
echo End Step: Trim After Sep
goto :EOF
:CHECK_BEGIN
if "!_LINE:~0,1!" == " " call :TRIM_BEGIN & goto CHECK_BEGIN
echo End Step: Trim Begin
goto :EOF
:CHECK_END
if "!_LINE:~-1!" == " " call :TRIM_END & goto CHECK_END
echo End Step: Trim End
goto :EOF
.
CSV 형식을 모르지만 배치를 알고 있습니다. 공백을 제거 할시기에 대한 간단한 설명과 함께 일괄 처리 전후에 샘플 CSV 파일을 게시하면 솔루션 일괄 처리 파일을 작성할 수 있습니다. – Aacini
BAT는 많은 것들을 상당히 잘 처리하지 못하고 ... 가장 가난한 부분은 문자열 처리입니다. 트림 (TRIM)과 같은 것은 죽은 듯 단순한 것처럼 보이지만 실제로 그러한 일을 제어하는 BAT는 상당히 어려울 수 있습니다. 아마 불가능하지는 않지만 확실히 좋은 방법이 있습니다. –
여기 몇 가지 트림 구현이 있습니다. http://www.dostips.com/DtTipsStringManipulation.php – npocmaka