如何更改bat文件中for /f函数循环的分隔符以及如何不在新的尾随行中输出程序的结果

How to change the delimiter of for /f function loop in a bat file and how to not output the result of the program in a new trailing line

这是我的第一站,所以请指出我在 post 中犯的任何错误或解决此问题的方法!所以,我和我的朋友有一个小项目,我们必须在其中制作一个批处理脚本,它必须在第一行访问一个文本文件,其中包含几个单词。一次选择一个词,我们必须访问一个站点并找到它的同义词并粘贴结果。这是我到目前为止所做的:

@echo off
title Prg1
set COS=
:b
for /f "Delims=%COS%" %%a in (word.txt) do (
 set SIN=%%a
 set COS=%SIN%
)
cd C:\
cd Folder
* finds synonim 
:Ask
echo Change the word " %SIN% " with the above word? (Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no
:yes
*send synonym* >> sinonim.txt 
echo       The transfer was succesful!
pause
goto :b

好的,很抱歉我无法像其他 post 一样将代码放在一个框中,我无法弄清楚。好吧,我有 2 个错误:
1) 在程序开始时,我给 COS 的值 space 所以当它进入 for 循环时,分隔符也将是 space。然后我将文本文件中第一个单词的值赋给 SIN。在那之后我给了 COS 与 SIN 相同的值所以在执行所有其他命令之后,goto :b 将 return 我到 for 循环并且我将有一个新的分隔符:文本中的第一个单词因此然后 SIN 将被设置为第二个字并再次开始循环。我的问题是,即使 COS 获得了 SIN 值,当它访问循环时它再次具有 space 值,因此脚本别无选择,只能一遍又一遍地做同样的事情。我该怎么办?
2) 当命令 send synonym >> sinonim.txt 执行时,它将新单词放在新行上。现在,我今天已经对此研究了很长时间,但我无法解决它,因为代码是这样的: (grep "blabla" blah.html) >> sinonim.txt. 我试图将其写为 (echo|set /p=(grep "blabla" blah.html)) >> sinonim.txt 但它没有用。再说一遍,我该怎么办?

如果您能在 Whosebug 社区回答我的两个问题,我将不胜感激!祝你有美好的一天!

你逻辑不好。您不能逐字处理文件。相反,您必须逐行处理它,并使用另一个 for 逐字处理每一行。
顺便说一句:你的 for 循环在任何事情完成之前就结束了,导致 %SIN% 只是你文件的最后一行。

伪代码:

for every line in word.txt do
  for every word in that line do
    (get the synonyme)
    write the synonyme (without linefeed)
  next word
  write a linefeed
next line

最终将整个输出重定向到新文件。

您的代码应该类似于:

@echo off
setlocal enabledelayedexpansion
(
  for /f "delims=" %%a in (word.txt) do (
    for %%b in (%%a) do (
      rem replace next line with some code to get the synonyme of %%b
       set "syn=[%%b]"
       <nul set /p "line=!syn! "
    )
    echo/
  )
)>out.txt

注意:这只是一个 "how-to" - 它会忽略空行和一些标点符号(因为它们被视为标准分隔符)