删除回车使用批处理为文件夹中的多个文件

时间:2017-02-10 14:59:58

标签: batch-file batch-processing

我在一个文件夹中有30个文本文件。我需要删除所有数据的数据中的换行符/换行符。我已经在批处理其他任务,所以继续使用它会很好。现在,批处理将所有扩展名从.csv重命名为.txt,然后启动excel文件。

我做了很多搜索,找不到像我需要的任何安静。我只是简单地涉足批处理脚本,所以用蜡笔绘制东西,这样我就能理解发生的事情会很棒。

1 个答案:

答案 0 :(得分:2)

您可以使用内置的可执行文件certutil将文件从ASCII转换为十六进制,使用for /f循环处理生成的文件,删除0d的任何实例(这是每行的回车符(十六进制),并从剩余的十六进制代码重建文件。我发誓这比我听起来更容易。

请注意,由于certutil的限制,最大输入文件大小限制为71 MB,而大于2 MB的文件可能需要一段时间才能处理,但至少一切都是Windows的原生文件所以你不必安装任何东西或学习一门全新的语言。

@echo off
setlocal enabledelayedexpansion

:: Ensure a file was passed in
if "%~1"=="" (
    echo Please provide a file to process.
    pause
    exit /b
)

:: Ensure file is under the certutil input limit
if %~z1 GTR 74472684 (
    echo This file exceeds the maximum file size of 74472684 bytes ^(71 MB^)
    echo Please use a smaller file.
    pause
    exit /b
)

:make_rand
:: Generate a random number to reduce the risk of filename collision
set rand=%RANDOM%%RANDOM%
set "temp_file=%~dpf1_%rand%.tmp"
set "hex_file=%~dpf1_%rand%.hex"
set "new_file=%~dpf1_new.%~x1"
if exist %temp_file% goto :make_rand
if exist %hex_file% goto :make_rand

if exist %new_file% choice /c:YN /M "%new_file% already exists. Overwrite? "
if %errorlevel% equ 1 del %new_file%
if %errorlevel% equ 2 exit /b

certutil -encodehex "%~1" "%temp_file%"

:: The script will break if you have spaces in your file path.
:: This is a feature, not a bug. Names your paths correctly.
for /f "tokens=1,*" %%A in (%temp_file%) do (
    set "line=%%B"
    set "hex_substring=!line:~0,48!"
    set "no_carriage=!hex_substring:0d=!"
    echo !no_carriage! >>%hex_file%
)

certutil -decodehex "%hex_file%" "%new_file%"

:: Temp file cleanup
del /q %hex_file%
del /q %temp_file%