首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用命令提示符或批处理文件从字符串中删除某些字符?

如何使用命令提示符或批处理文件从字符串中删除某些字符?
EN

Stack Overflow用户
提问于 2020-04-01 18:48:04
回答 2查看 2.5K关注 0票数 0

我的名字是Syarz,我是编程新手。我想知道如何使用cmd或批处理文件从字符串中删除字符。

这是data.txt文件中的字符串:

代码语言:javascript
复制
test.rar:$rar5$16$b19108e5cf6a5dadaa0ff515f59c6df7$15$f7f4933a2a8f7aa43d7fc31e86c47e2b$8$307ef2987e735bec

--在data.txt中运行命令或批处理文件后,我希望这样做

代码语言:javascript
复制
$rar5$16$b19108e5cf6a5dadaa0ff515f59c6df7$15$f7f4933a2a8f7aa43d7fc31e86c47e2b$8$307ef2987e735bec

,我尝试了一些在网站上可用的方法,但这些方法似乎都不适合我。他们要么删除整个字符串,要么从我不想删除的地方删除部分。

我已经尝试过的

1-

代码语言:javascript
复制
more +1 "data.txt" > "data_NEW.txt"

二-

代码语言:javascript
复制
@echo off
(
    for /F usebackq^ skip^=1^ delims^=^ eol^= %%L in ("data.txt") do echo(%%L
) > "data_NEW.txt"

3-

代码语言:javascript
复制
@echo off
(
    for /F "skip=1 delims=" %%L in ('findstr /N "^" "data.txt"') do (
        set "LINE=%%L"
        setlocal EnableDelayedExpansion
        echo(!LINE:*:=!
        endlocal
    )
) > "data_NEW.txt"

4-

代码语言:javascript
复制
@echo off
for /F %%C in ('find /C /V "" ^< "data.txt"') do set "COUNT=%%C"
setlocal EnableDelayedExpansion
(
    for /L %%I in (1,1,%COUNT%) do (
        set "LINE=" & set /P LINE=""
        if %%I gtr 1 echo(!LINE!
    )
) < "data.txt" > "data_NEW.txt"
endlocal

5-

代码语言:javascript
复制
void chopN(char *str, size_t n)
{
    assert(n != 0 && str != 0);
    size_t len = strlen(str);
    if (n > len)
        return;  // Or: n = len;
    memmove(str, str+n, len - n + 1);
}

6-

代码语言:javascript
复制
void chopN(char *str, size_t n) {
  char *dest = str;

  // find beginning watching out for rump `str`
  while (*str && n--) {
    str++;
  }

  // Copy byte by byte
  while (*src) {
    *dest++ = *src++;
  }

  *dest = '\0';
}

7-

代码语言:javascript
复制
for /f %%a in (input.txt) do set "line=%%a"
set "line=%line:pub:04:=%"
set "line=%line::=%"
echo %line%

八-

代码语言:javascript
复制
@echo off
setlocal enabledelayedexpansion
set "first=true"
(for /f "eol=p delims=" %%a in (input.txt) do (
  set "line=%%a"
  if defined first (set "line=!line:~2!" & set "first=")
  <nul set /p ".=!line::=!"
))>output.txt

只是想学点新东西。谢谢大家

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-02 17:34:33

我认识到你要求批处理,但我没有提供批处理的答案,所以我会帮助你的人,批回答回来。

下面是一种简单的方法,PowerShell:

代码语言:javascript
复制
$f = Get-Content data.txt
$out = 'data2.txt'

$f | ForEach-Object { 
    $_.Split(':')[1] 
} | Out-File $out -Append
票数 0
EN

Stack Overflow用户

发布于 2020-04-07 22:21:40

嗯,您的许多尝试-#1到#4-似乎删除了输入文本的第一行。#7和#8可能更接近你想要的,但这些方法不适合你的样本数据。而#5和#6绝对不是批处理文件。

要将文本拆分为特定字符,即在您的情况下使用冒号,只需使用for /F loop

代码语言:javascript
复制
for /F "tokens=1,2 delims=:" %%I in (data.txt) do (
    echo 1st token: %%I
    echo 2nd token: %%J
)

如果第二部分可以单独包含要保留的冒号,则需要将令牌2更改为*,这意味着“所有其余部分”:

代码语言:javascript
复制
for /F "tokens=1,* delims=:" %%I in (data.txt) do (
    echo 1st token: %%I
    echo remainder: %%J
)

考虑到for /F循环将多个相邻的分隔符合并为一个,因此像abc::def这样的字符串将被拆分为abcdef两个部分。还请注意,前导分隔符将被移除,因此像:abc::def这样的字符串也将被拆分为abcdef两个部分。换句话说,for /F不返回空令牌。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60978186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档