Как добавить новую строку в EOF в пакетном режиме или ps для всех файлов в папке? - PullRequest
1 голос
/ 26 июня 2019

Я хотел бы перебрать все js-файлы в папке и добавить точную строку ко всем из них.Текст должен быть добавлен в конце файла в новой строке.Я хотел бы, чтобы он был написан на языке сценариев, поддерживаемых Windows, таких как пакет или PowerShell.

Мой псевдокод будет выглядеть так:

foreach file in folder
    append some text to file in a new line

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Это легко сделать с помощью PowerShell.

Add-Content -Path 'C:\src\t\copyt\*.txt' -Encoding ascii -Value "`nEND"

Или в скрипте .bat file.

powershell -NoLogo -NoProfile -Command ^
    Add-Content -Path 'C:\src\t\copyt\*.txt' -Encoding ascii -Value "`nEND"

Если файлы не большие, добавьте строку передпоследняя строка:

$TempFile = New-TemporaryFile

Get-ChildItem -File -Path 'C:\src\t\copyt' -Filter '*.txt' |
    ForEach-Object {
        $f = Get-Content -Path $_.FullName
        $f[0..($f.Length -2)] + "BOTTOM LINE" + $f[-1] |
            Out-File -FilePath $TempFile -Encoding default
            Remove-Item -Path $_.FullName
            Move-Item -Path $TempFile -Destination $_.FullName
    }

Remove-Item -Path $TempFile
1 голос
/ 27 июня 2019

Это можно легко сделать с помощью , используя оператор перенаправления >> , учитывая, что каждый файл заканчивается переводом строки:

for %%F in ("%TargetFolder%\*.js") do (
    >> "%%~F" echo/This is the new line of text.
)

Или, если вы хотите перейти также в подкаталоги:

for /R "%TargetFolder%" %%F in ("*.js") do (
    >> "%%~F" echo/This is the new line of text.
)

Конечно, вы можете сначала явно добавить разрыв строки:

for %%F in ("%TargetFolder%\*.js") do (
    >> "%%~F" (
        echo/
        echo/This is the new line of text.
    )
)

Или, конечно, для рекурсивного подхода.


Если вы хотите добавить разрыв строки только в том случае, если файл еще не заканчивается таким, вы можете сделать следующее:

for %%F in ("%TargetFolder%\*.js") do (
    rem /* Count the number of lines that contain zero or more characters at the end;
    rem    this is true for every line except for the last when it is not terminated
    rem    by a line-break, because the `$` is anchored to such: */
    for /F %%D in ('findstr ".*$" "%%~F" ^| find /C /V ""') do (
        rem // Count the total number of lines in the file:
        for /F %%C in ('^< "%%~F" find /C /V ""') do (
            >> "%%~F" (
                rem // Compare the line counts and conditionally append a line-break:
                if %%D lss %%C echo/
                echo/This is the new line of text.
            )
        )
    )
)

И опять то же самое для рекурсивного подхода.

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