Пакетный скрипт не выводит файлы с этим кодом - PullRequest
0 голосов
/ 29 января 2019

Этот скрипт должен выводить каждое слово в предложении из 10 слов, хранящемся в строке 1 (при вызове с SeparateLine.bat (имя файла) 1, но он не показывает ошибок, не выводит или создает файл.

IЯ уже пытался удалить скобки в (echo %%a > 1.txt) и приведенных ниже, но безрезультатно. Я также пробовал разные форматы для вывода результатов, но безрезультатно.

@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
if "%~2"=="1" set line=1 & goto start
set /a line=%~2-1
:start
For /f "tokens=1,2,3,4,5,6,7,8,9,10* usebackq skip=%line% delims= " %%A in ("%~1") do (                       
    if not "%%A"=="" (echo %%A > 1.txt)
    if not "%%B"=="" (echo %%B > 2.txt)
    if not "%%C"=="" (echo %%C > 3.txt)
    if not "%%D"=="" (echo %%D > 4.txt)
    if not "%%E"=="" (echo %%E > 5.txt)
    if not "%%F"=="" (echo %%F > 6.txt)
    if not "%%G"=="" (echo %%G > 7.txt)
    if not "%%H"=="" (echo %%H > 8.txt)
    if not "%%I"=="" (echo %%I > 9.txt)
    if not "%%J"=="" (echo %%J > 10.txt)
    GOTO endforloop
)
:endforloop

С файлом, которыйсодержит один, два, три ... десять разделенных пробелами, он должен вывести 10 файлов (максимальный предел слова равен 10), каждый из которых содержит слово 1-10 строки (я указал строку 1 во втором параметре, так как слова находятся напервая строка), но фактические результаты ... ничего. Буквально, он действует так, как будто он успешно завершен, но файлы не создаются и, ну, нет кодов ошибок.

1 Ответ

0 голосов
/ 29 января 2019

Я думаю, это будет то, что вы ищете.Обратите внимание, что вы не можете использовать предопределенную переменную в skip=%line%, вам нужно вместо этого использовать more +%line%, нет необходимости определять каждый токен token=1,2,3,4... и т. Д. Просто используйте tokens1-10 и, наконец, но не в последнюю очередь, нет необходимостииспользование delims= в качестве пробела является разделителем по умолчанию:

@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
if "%~2"=="1" set line=1 & goto start
set /a line=%~2-1
:start
For /f "tokens=1-10" %%A in ('type "%~1" ^| more +%line%') do (              
    if "%%A" NEQ "" echo %%A
    if not "%%B"=="" echo %%B
    if not "%%C"=="" echo %%C
    if not "%%D"=="" echo %%D
    if not "%%E"=="" echo %%E
    if not "%%F"=="" echo %%F
    if not "%%G"=="" echo %%G
    if not "%%H"=="" echo %%H
    if not "%%I"=="" echo %%I
    if not "%%J"=="" echo %%J
    goto :EOF
)

Однако есть ошибка с вашей переменной line.

, если пользователь выбирает 0, это будет сделано 0 - = -1 and then set the lines to skip -1 if a user selects 2 it will set it to skip 1`, что не то, что запрашивал пользователь, поэтому я предлагаю вам уточнить, каковы ваши намерения с пропусками, но, возможно, просто полностью избавиться от этого,как:

@echo off
if not exist "%~1" echo file not found & exit /b 1
if "%~2"=="" echo line not defined & exit /b
set /a line=%~2
:start
For /f "tokens=1-10" %%A in ('type "%~1" ^| more +%line%') do (              
    if "%%A" NEQ "" echo %%A
    if not "%%B"=="" echo %%B
    if not "%%C"=="" echo %%C
    if not "%%D"=="" echo %%D
    if not "%%E"=="" echo %%E
    if not "%%F"=="" echo %%F
    if not "%%G"=="" echo %%G
    if not "%%H"=="" echo %%H
    if not "%%I"=="" echo %%I
    if not "%%J"=="" echo %%J
    goto :EOF
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...