我想制作一个程序,将文本文件第二行的内容放在第一行。 (第二个是否未编辑都没关系)
for /f "tokens=1" %%t in (file.txt) do set string1=%%t
for /f "tokens=2" %%t in (file.txt) do set string2=%%t
echo %string1%%string2%>file.txt
我有两个问题似乎无法解决。
一个:循环只在变量中包括每行的第一个单词。
二:Echo不会用给定的变量替换文件的第一行,而是禁用了ECHO命令(我使用的是Windows 10的法语版本,只是翻译了文件中写的内容,英文是Windows版本可能会略有不同,但您会明白的。
如果您有任何建议,请解释一下您提供的代码的作用(我一直很乐意学习)
答案 0 :(得分:1)
您的问题尚不清楚,可以通过几种不同的方式来理解。无论如何,无需使用for
命令即可简化此管理:
@echo off
setlocal EnableDelayedExpansion
< file.txt (
rem Takes the content of the first line
set /P "line1="
rem Takes the content of the second line and puts it on the first
set /P "line2="
echo !line1!!line2!
rem It doesn't matter if the second line doesn't get edited
echo !line2!
rem Copy the rest of lines
findstr "^"
) > output.txt
move /Y output.txt file.txt
答案 1 :(得分:0)
默认情况下,FOR命令使用空格作为分隔符。因此,您必须告诉它不要在DELIMS选项中使用任何定界符。另外,您应该能够使用一个FOR / F命令执行此操作。只需将前一行保留在变量中即可。
@ECHO OFF
setlocal enabledelayedexpansion
set "line1="
(for /f "delims=" %%G in (file.txt) do (
IF NOT DEFINED line1 (
set "line1=%%G"
) else (
echo !line1!%%G
set "line1="
)
)
REM If there are an odd amount of lines, line1 will still be defined.
IF DEFINED line1 echo !line1!
)>File2.txt
编辑:我想我完全误解了您的问题。一旦您澄清了问题,如有需要,我将重新发布代码解决方案。
答案 2 :(得分:0)
使用skip忽略第一行,并将第二行写入两次。通常,对文件进行编辑意味着要重写为新文件,并且可能需要重命名以保留旧文件名。
:: Q:\Test\2018\07\25\SO_51508268.cmd
@Echo off
Set "flag="
( for /f "usebackq skip=1 delims=" %%A in ("file1.txt") Do (
If not defined flag (
Echo=%%A
Set flag=true
)
Echo=%%A
)
) >file2.txt
Del file1.txt
Ren file2.txt file1.txt
运行该批处理后,最初编号为1..5的file1.txt如下所示:
> type file1.txt
2
2
3
4
5