Command line 子字符串窗口命令行

Command line 子字符串窗口命令行,command-line,cmd,Command Line,Cmd,我试图根据文本文件中的固定位置从文本文件的每一行获取子字符串。我希望使用命令行实现这一点 我的文件如下所示: 45testing45 46testing46 47testing47 48testing48 49testing49 50testing50 51testing51 52testing52 53testing53 我尝试了以下命令行: For -F %i in (inputFile.txt) do (SET _line=%i SET _chars=%_line:~10,2% @ech

我试图根据文本文件中的固定位置从文本文件的每一行获取子字符串。我希望使用命令行实现这一点

我的文件如下所示:

45testing45
46testing46
47testing47
48testing48
49testing49
50testing50
51testing51
52testing52
53testing53
我尝试了以下命令行:

For -F %i in (inputFile.txt) do (SET _line=%i SET _chars=%_line:~10,2% @echo _chars > outputFile.txt)
但是结果是outputFile.txt被创建但为空,当我在命令提示符中点击SET时,我看到了_line变量,例如_line=53testing53 SET _chars=%_line:~10,2%@echo _chars>outputFile.txt) 我不明白为什么,我想我在do部分遗漏了一个分隔符,这样我就可以分隔不同的SET命令了

你能帮我在新的输出文件中找到文件的最后两位数字吗?我已经下载了Cygwin,所以我也可以使用Unix命令,但我不知道如何使用sed或awk提取文件每行的固定长度子字符串


提前谢谢。

你有几个打字错误,我把它写进了脚本

For /F %%i in (inputFile.txt) do (CALL :DisplaySubString %%i)
GOTO :EOF

:DisplaySubString
SET _line=%1 
SET _chars=%_line:~9,2% 
@echo %_chars% >> outfile.txt
一个问题是您试图在
()
中处理变量。您需要使用DelayedExpansion来实现这一点

为了解决这个问题,我在.cmd文件中创建了一个名为
:DisplaySubString
的“子程序”

你的索引被关闭了1,
10
->
9

@echo%\u chars%
缺少
%

您必须使用
>
而不是
>
在运行时附加到文件中

这可能适合您:

(对于(inputFile.txt)中的/F%A,执行@Set“\=%A”&调用Echo^%\:~-2^%)>outputFile.txt

实际上,如果你想用sed()解决这个问题,你并不需要在Windows中使用Cygwin。下载sed二进制文件并将其放入PATH变量后,可以在命令提示符下键入下一个命令:

sed -r "s/.*([0-9]{2})/\1/" input.txt > output.txt
就这样做了。您可以在线找到sed的手册页面。 纯cmd脚本:

@echo off
  setlocal enabledelayedexpansion
    set "f=C:\files\input.txt"
    >C:\files\output.txt (for /f %%i in (%f%) do (
      set "l=%%i"
      echo !l:~-2!
    ))
  endlocal
exit /b

您的意思是/F的
,而不是-F
。是的,对不起,我的意思是/fy您需要在一行中的多个命令之间放置
&
。。Mike,问题示例和标记是针对cmd.exe中的命令行的,您已经提供了Windows批处理脚本答案。@aschipfl,它的内容与应该的内容完全相同,我已对每个百分比字符进行了转义,
%
,并用插入符号
^
将名为
\
的变量括起来。与我的大多数代码不同,这段代码实际上是在WindowsVista上测试的!我可以确认它在Windows7上也可以工作;无论如何,这实际上不是转义,因为
%
符号在
^
之前被识别;似乎您很幸运,因为
~-2^
是无效的子字符串扩展语法,因此没有扩展(但不是中止执行的致命错误);因此,第二个解析阶段接收的字符串没有
^
,这是有效的语法…@aschipfl,我使用了转义这个术语,只是为了便于理解,我真的不想进一步解释。然而,我很好奇为什么
%\u:~-2%
是无效语法,尽管它特别扩展到最后两个字符,给出了一个类似的示例
%\u test:~-7%
。e、 g.
SET\u test=123456789abcdef0
后接
::仅提取最后7个字符
SET\u result=%\u test:~-7%
with
ECHO%\u result%=abcdef0
%\u:~-2^%
是无效语法(请注意插入符号),这就是它在第一阶段未展开的原因;第二阶段接收不带
^
的字符串,因此它是有效的,然后。。。不管怎样,它是有效的。。。