Пакетный скрипт для добавления пробела в конце каждой строки, чтобы размер строки составлял 50 для каждого текстового файла в каталоге - PullRequest
0 голосов
/ 30 марта 2019

Я хочу написать пакетный скрипт так, чтобы он шел в конкретный каталог и для каждого текстового файла добавлялся пробел в конце каждой строки, так что размер каждой строки (столбца) составлял 50. Он должен обновлять один и тот же файлвместо создания нового файла.

Пример: у меня есть 5 файлы, file1, file2, file3, file4 и file5.Каждый файл имеет несколько строк, например file1, содержит 3 строк:

lin 1 (length of line 27)
line 2 (length of line 37)
line 3 (length of line 47)

В конце вывод file1 должен быть:

lin 1 (length of line 50)
line 2 (length of line 50)
line 3 (length of line 50)

С добавлением пробелав конце строки.То же самое следует повторить для всех файлов для каждой строки.

@ECHO OFF
ECHO lets start
REM set current path 
set pathname="C:\Users\Desktop\New folder"
REM Change the Directory
cd /d %Pathname%
echo Directory changed to %Pathname%
for %%x in (*.txt) do (
echo %%x
for /f " tokens=* delims= " %%a in (%%x) do (
    echo %%a        
 )
)

PAUSE

1 Ответ

0 голосов
/ 31 марта 2019

Вот пакетный скрипт, который делает то, что вы хотите (обратите внимание на примечания rem в коде):

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem // Define constants here:
set "PATHNAME=C:\Users\Desktop\New folder" & rem // (root directory)
set "SPACES=                                                  " & rem // (50 spaces)
set "TRUNC=#" & rem // (set empty to not truncate lines longer than 50 char.s)

rem // Enumerate matching files:
for %%F in ("%PATHNAME%\*.txt") do (
    rem // Write to temporary file:
    > "%%~F.tmp" (
        rem // Read a file line by line (empty lines are skipped):
        for /F usebackq^ delims^=^ eol^= %%L in ("%%~F") do (
            rem // Store current line:
            set "LINE=%%L"
            setlocal EnableDelayedExpansion
            rem // Check whether line is not longer than 50 char.s:
            if "!LINE:~,50!"=="!LINE!" (
                rem // Not longer, so pad with spaces, then truncate:
                set "LINE=!LINE!%SPACES%"
                echo(!LINE:~,50!
            ) else (
                rem // Longer, so check whether to truncate or keep:
                if defined TRUNC (
                    echo(!LINE:~,50!
                ) else (
                    echo(!LINE!
                )
            )
            endlocal
        )
    )
    rem // Replace original file by temporary one:
    > nul move /Y "%%~F.tmp" "%%~F"
)

endlocal
exit /B

Перед проверкой следует сделать резервную копию ваших файлов, потому что ваши входные текстовые файлы заменяются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...