【问题标题】:Equivalent to 'cut' on Windows [duplicate]相当于 Windows 上的“剪切”[重复]
【发布时间】:2014-09-23 20:07:24
【问题描述】:

我有一个包含以下条目的文件。

/a/b/c/d/e/f
/a/b/c/g/k/l/f/j/h
/a/b/c/i/m/n/p

我需要在 Windows 中使用一个命令来从文件中删除 '/a/b/c' 部分。

输出文件应该是这样的

d/e/f
g/k/l/f/j/h
i/m/n/p

我尝试使用/ 作为分隔符的for 命令,但我无法获得预期的结果。 我该怎么做?

【问题讨论】:

  • 我得到这个错误'cut'不是内部或外部命令、可运行程序或批处理文件。
  • @user3437212 你下载了 GnuWin32 包吗?您是否将这些工具放入您的 PATH 变量中?
  • @a_horse_with_no_name 难道没有其他方法可以做到这一点吗?不安装 gnuwin32 软件包?我没有在我目前正在使用的系统上安装软件包的特权:(
  • 我不这么认为。但是“安装”它有什么问题呢?下载 zip 文件,解压,完成。

标签: windows batch-file


【解决方案1】:
@echo off

(for /f "tokens=3,* delims=/" %%a in (input.txt) do echo %%b) > output.txt

“诀窍”是要求第三个令牌和该行的其余部分。

直接从命令行使用:

(for /f "tokens=3,* delims=/" %a in (input.txt) do @echo %b) > output.txt

转义的百分号被简化了,因为从命令行默认不启用echo off,所以需要echo之前的@

【讨论】:

  • 这正是我想要的!谢谢! %%b 是错字吗?当我给 echo %%a 时,我似乎得到了错误的结果!
  • 很酷的把戏。邪恶的符号。所以以上不是错别字。对于从分隔符中取出的每个“标记”,它被分配给系列中的第一个字母 %%a,并且代码自动将后续匹配分配给递增的变量 %%b、%%c 等等。我不知道它是否总是必须以 %%a 开头。因此,上面使用的技巧采用 (3)rd 标记,然后是所有其他标记 (*)。这分别分配给 %%a 和 %%b。既然你想要 /a/b/c 后面的所有内容,你想要输出的第二个匹配项,即 %%b。 %%a 只是用作定位锚。
  • 如何在管道操作中使用它?我在 Linux 上有这个:svn info | grep "修订:" | cut -d':' -f2 给我字符串“Revision: 102”中的“102”,我需要 Windows BAT 文件中的等价物。到目前为止,我有; svn 信息 | findstr "Revision:" 效果很好,但我不知道如何将结果传递给 for 以将数字与单词隔离开来。
【解决方案2】:

PowerShell:

get-content test.txt | foreach-object {
  $_ -replace '/a/b/c/',''
} | out-file test2.txt

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多