0

我尝试编写一个接受参数的脚本:

  • 线的范围
  • 列范围

例如: cmd 文件名 1 5 12 87 其中 1 和 5 是行范围,12 和 87 是列范围

我想从这些范围中提取文本。

我使用 head 和 tail 找到了 line 的东西,但我不知道如何选择相应的列。

仅适用于 windows:批处理、powershell。


更新 1

文件.txt

define('HTTP_REQUEST_METHOD_GET',     'GET',     true);
define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
define('HTTP_REQUEST_METHOD_POST',    'POST',    true);
define('HTTP_REQUEST_METHOD_PUT',     'PUT',     true);
define('HTTP_REQUEST_METHOD_DELETE',  'DELETE',  true);
define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true);
define('HTTP_REQUEST_METHOD_TRACE',   'TRACE',   true);

cmd文件.txt 1 3 19 27

输出

                  ST_METHOD_GET',     'GET',     true);
define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
define('HTTP_REQUEST_METHO

我在第一行添加空白只是为了更好地表示。

事实上,该脚本模拟了从 W 列开始(仅用于第一行)并在 Z 列(仅用于最后一行)开始从 X 行到 Y 行的文本选择

4

2 回答 2

2

试试这个:

Function SelectTextRange( $path, $SL, $EL, $SS , $ES)
{
  $txt = gc $path
  $txt | select -First (($EL+1)-$SL) -Skip ($SL-1) |
     % { $_.substring( ($SS-1) ,($ES-$SS+1) )}
}

我了解列和行值是包含值。

在您获得更准确的样本后,请尝试以下操作:

Function SelectTextRange( $path, $SL, $EL, $SS , $ES)
{
  $txt = gc $path
  $c = 0
  $txt[($sl+1)..($el+1)] | % { 

  if ($c -eq 0) { $_.substring($ss-1) } 
  if ($c -gt 0 -and $c -lt $txt[$sl..$el].count ) { $_}
  if ($c -eq ($txt[$sl..$el].count) ) { $_.substring(0,$es+1) } ;

  $c++
  }
}
于 2012-11-23T10:57:04.207 回答
2
@echo off
setlocal EnableDelayedExpansion

set n=1
set /a start=%4-1
set /a len=%5-%4

for /f "usebackq delims=" %%a in ("%1") do (
  if !n! gtr %3 exit /b
  if not !n! lss %2 (
    set "row=%%a"
    echo !row:~%start%,%len%!
  )
  set /a n += 1
)

编辑:根据你的例子,我更新了我的答案,我认为你正在寻找这个:

@echo off
setlocal EnableDelayedExpansion

set n=1
set /a startc=%4-1
set /a endc=%5-1

for /f "usebackq delims=" %%a in ("%1") do (
  set "row=%%a"
  if !n! == %3 (
    if !n! == %2 echo !row:~%startc%,%endc%!
    if not !n! == %2 echo !row:~0,%endc%!
    exit /b
  )
  if !n! == %2  echo !row:~%startc%!
  if !n! gtr %2 echo !row!
  set /a n += 1
)
于 2012-11-23T11:25:56.113 回答