@echo off
setlocal enableextensions disabledelayedexpansion
for /r %f in (xis_a*) do More +1 %~nxf >> No_header_%~nxf
set "search=:20:"
set "replace={:20:"
for /f "delims=" %%i in ('type (No_header_*.txt) ^& break ^> (No_header_*.txt) ') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>>No_header_*.txt echo(!line!
endlocal
)
我试图跳过文本文件中的标题行并替换:20:with {:20:。我已经写了并且已经取得了差不多...请尽量帮助我对这个全新的
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
set "search=:20:"
set "replace={:20:"
for /r "%sourcedir%" %%f in (xis_a*) do (
REM DEL "%destdir%\No_header_%%~nf.txt" >NUL 2>nul
for /f "usebackqskip=1delims=" %%i in ("%%f") do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
>>"%destdir%\No_header_%%~nf.txt" echo(!line!
ENDLOCAL
)
)
GOTO :EOF
这应该可以解决问题。
在您的代码中,初始setlocal
正在建立默认条件,因此我省略了它。
您的%f
中的'for /r
- 元变量%
之前的f
需要加倍。
more
仪式不是必需的 - for /f
有一个skip
选项,可以跳过前n行。
所以 - 所需要的只是获取for...%%f...
循环和每个文件生成的文件列表,处理每个单独的文件,跳过第一行。引用%%f
中出现的文件名只是一个允许包含分隔符的文件名的安全措施,但这意味着需要调用usebackq
来告诉for /f
给出的列表不是文字字符串(它将假定为“引用字符串”,但是文件名。
然后,由于%%f
是%%i
循环的上下文,因此您可以使用%%~nf
选择目标文件名。我不确定您是想要~nf
还是~nxf
(添加第二个.txt
扩展名),所以我选择单独使用~n
。请注意,您对*
的使用注定失败 - 这意味着“所有匹配的文件” - 可能不是您想要的,并且cmd
会非常困惑。
我已经使用了一个已删除的del
命令来删除目标文件 - 如果需要,只需删除rem
,否则数据将附加到任何现有文件中。
我使用u:
驱动器进行测试,并保留了我的源名称和目标名称。毫无疑问,您需要根据自己的系统进行更改。