是否有一个相当于Windows中的cmd.exe“砍-c”?(Is there an equival

2019-07-23 14:28发布

我有固定线路的大小一些文件,固定字段的大小,我需要提取信息。 Nornmally,我会使用Cygwin( cut等),但是,这不是在这种情况下一种选择,由于(愚蠢的)管理政策我不能改变。 使用包含在Windows XP的标准工具集来完成。

我需要提取10个字符偏移量7个4个字符的偏移量22(从零开始),并且将它们输出到一个文件,但有轻微的扭曲:

  • 第一字段可以具有负,正,或无符号(在开始或结束)。 标志应移到前面,或删除完全,如果它是积极的。
  • 第二场应该有开头和结尾去掉空格。

例如:

          1         2         3          <- ignore (these lines not in file,)
0123456789012345678901234567890123456789 <- ignore ( here only for info.)
xxxxxxx    15.22-yyyyyABCDzzzzzzzzzzz...
xxxxxxx   122.00+yyyyy XX zzzzzzzzzzz...
xxxxxxx         9yyyyyYYY zzzzzzzzzzz...

应产生( <指示行的结束):

-15.22,ABCD<
122.00,XX<
9,YYY<

Answer 1:

如果用现代的窗口工作,你不局限于CMD.EXE命令本身,你可以使用VBScript。 如果您的策略是不是无论是使用VBScript,那么我想你应该解雇你的管理:)

Set objFS=CreateObject("Scripting.FileSystemObject")
strFile = "c:\test\file"
Set objFile = objFS.OpenTextFile(strFile)
strFirstLine = objFile.ReadLine
Do Until objFile.AtEndOfStream
    strLine= objFile.ReadLine
    var1 = Mid(strLine,10) ' do substring from position 10 onwards
    ' var2 = Mid (strLine,<pos>,<length>) ' get next offset and save to var2
    WScript.Echo var1 & var2  ' print them out.
Loop

基本上,“一刀切”的字符串的字符,你可以使用MID()函数。 请看看VBScript中的文件 ,以了解更多信息。

保存上面test.vbs,并在命令行上,做

c:\test> cscript /nologo test.vbs > newfile

当然,“子”也可以用纯cmd.exe的做,但我会留给其他一些人来指导你。

由大同更新:基于这个答案,我想出了这将是一个良好的开端如下:

option explicit
dim objFs, objFile, strLine, value1, value2

if wscript.arguments.count < 1 then
    wscript.echo "Usage: process <input-file>"
    wscript.quit
end if

set objFs=createObject("Scripting.FileSystemObject")
set objFile = objFs.openTextFile(wscript.arguments.item(0))
do  until objFile.atEndOfStream
    strLine= objFile.readLine
    value1 = trim(mid(strLine, 8, 10))
    value2 = trim(mid(strLine, 23, 4))
    if right(value1,1) = "-" then value1 = "-" & left(value1,len(value1)-1)
    if right(value1,1) = "+" then value1 = left(value1,len(value1)-1)
    if left(value1,1) = "+" then value1 = mid(value1,2)
    wscript.echo value1 & "," & value2
loop

这符合所有我们的要求。 稍后,我们可以使偏移和长度为命令行参数。

最终更新。



Answer 2:

这个网站有关于如何在CMD.EXE子提取一些指针: http://www.dostips.com/DtTipsStringManipulation.php

该网站建议您可以使用

%varname:~2,3%

到标中的变量。 这似乎满足您的需要,但你现在必须得到各行成一个变量。

接下来,你要看看可怕for循环语法以及if和分支(你可以转到:labels批量)。

这东西都是比较难看,但如果你真的去那里...

这里是SO页面上通过文件循环和做的东西对他们说: 使用Windows批处理文件在一个文本文件你如何遍历每一行?



Answer 3:

这里有一个小脚本(需要在一个BAT / CMD文件)扩大对什么达人托马斯·建议:

@echo off
setlocal
set key=HKCU\Software\Microsoft\Windows\CurrentVersion\Ext\Stats\{D27CDB6E-AE6D-11CF-96B8-444553540000}\iexplore\AllowedDomains

echo.
echo Liste der fuer Flash im IE zugelassenen Domaenen:
echo =================================================
for /f "usebackq tokens=11 delims=\" %%l in (`call reg query "%key%" /s`) do echo. %%l
echo.
endlocal

for循环的核心部分。 注意在双引号中使用命令改性剂。 我指定tokens=11 ,因为我只的子项有兴趣AllowedDomains ,这是在第10位。

请务必阅读在帮助for /? 。 达人是正确的,他说,这东西都是比较难看。 而且很容易分解的修改。 有很多非直观的奥妙与cmd.exe脚本语法。

顺便说一句,该GUID是的Shockwave Flash COM类ID添加上。 它的出现自至少2001年那么很可能继续成为相关预见的未来。 该脚本的目的是列出在域的Flash,这是我比较喜欢默认阻止 ,已被允许。



文章来源: Is there an equivalent to 'cut -c' in Windows cmd.exe?
标签: windows cmd