批量命令以修剪CSV中的空格

时间:2012-03-29 21:14:43

标签: batch-file cmd dos

我尽量避免使用PowerShell。

寻找一种使用Windows批处理命令读取文本CSV文件(列数可能不同)并修剪空格的方法。前导和尾随空格必须去,但必须保留休息

提前致谢

1 个答案:

答案 0 :(得分:0)

我想你想删除空格   - 在结束和开始   - 任何分隔符之前和之后

我认为你的分隔符将通过文件保持一致,所以让它在脚本中而不是参数。 该脚本假设值内没有分隔符(这可能发生在字符串中)。 如果需要处理更多特殊字符(如tab),则应添加匹配块。 !使用delayed expansion时替换%。我需要这样做,以便在子块中很好地解析变量。

说明:
对于每一行,检查每个案例。
    找到案例时,循环遍历它。

@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

HTH 我可能不太善于解释,所以不要介意询问细节。