пакетное программирование файлов - PullRequest
4 голосов
/ 25 сентября 2010

Я пытался скопировать один файл в другой от начальной строки до пределат.е. строки от 1 до 10 (file1.txt) -> file2.txt, но при написании «!»пропущенчто я могу сделать, чтобы решить это.Любая помощь будет благодарна.

Цикл для этой функции приведен ниже.

%NF%-> new file.

%EF%-> existing file

%1% -> line number(passed from another part)

:_doit

findstr /N /R "." %EF%|findstr /B /C:"%1:">nul

if errorlevel 1 (    
    echo. >>%NF%        
) else (    
    for /f "tokens=1 delims=" %%a in ('findstr /N /R "." %EF%^|findstr /B /C:"%1:"') do (    
        if [%%a] EQU [] (    
            echo. >>%NF%    
        ) else (    
            echo %%a >>%NF%    
       )     
   )
)

Ответы [ 4 ]

3 голосов
/ 28 сентября 2010

Если вы можете скачать инструменты, вы можете использовать GNU win32 gawk

gawk.exe "NR>10{exit}1"  file1 > file2

И вы можете взглянуть на эту тему здесь , которая похожа

3 голосов
/ 30 сентября 2010

Причиной является расширение с задержкой, если вы отключите его, также! работать как положено. Вы можете отключить его только для цикла.

if errorlevel 1 (    
    echo. >>%NF%        
) else (
   setlocal DisableDelayedExpansion
    for /f "tokens=1 delims=" %%a in ('findstr /N /R "." %EF%^|findstr /B /C:"%1:"') do (    
        if [%%a] EQU [] (    
            echo. >>%NF%    
        ) else (    
            echo %%a >>%NF%    
       )     
   )
   endlocal
)

Анализатор для партийных линий имеет несколько фаз: Первая фаза - это расширение% var%, затем фаза специальных символов "^ <> & | () и после фазы %% a задерживается (фаза восклицания).

Вот почему! исчезнуть в вашем случае. Потому что вы получили что-то подобное из своего файла %% а = Hello! Затем восклицательный этап пытается расширить!, Но это не удается и он удаляется.

Если в вашем файле есть строка Привет ^! ты попал в свою "копию" Здравствуйте!

Но в пакетном файле вам нужно две каретки, чтобы отобразить одну!

echo hello^^!

Потому что в фазе 2 ^^! надувается до ^ !, и в восклицательном знаке последняя каретка избегает!

2 голосов
/ 28 января 2011
if errorlevel 1 ( 
    echo. >>%NF% 
) else ( 
    for /f "tokens=1 delims=" %%a in ('findstr /N /R "." %EF%^|findstr /B /C:"%1:"') do ( 
       if [%%a] EQU [] ( 
          echo. >>%NF% 
       ) else( 
          setlocal DisableDelayedExpansion 
          echo %%a >>%NF%
          endlocal
       ) 
    )
)
1 голос
/ 25 сентября 2010

Может использовать gawk.exe из UnxUtils :

gawk "NR<10" < file1 > file2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...