我有一个脚本可以完成我期望它做的所有事情,除了一行。
我以前做过类似的,但我不能让这个工作。
我得到的代码在这里
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
::Set Path to be folder of Sage Files
SET PATH=C:\Welcome\Progs\SitesDataSetups\GeorgeYarmouth
::set date variables
for /f "tokens=1" %%i in ('date /t') do set thedate=%%i
set mm=%thedate:~3,2%
set dd=%thedate:~0,2%
set yyyy=%thedate:~6,4%
::Set T_DAY variable to date in ddmmyy format
set T_DAY=%dd%%mm%%yyyy:~2%
c:
cd\
cd %path%
for /f "usebackq tokens=* delims= " %%P in (`dir sage*.csv /od /b`) do (
set SAGE=%%P
set SAGE2=!SAGE:~0,8!_EDITED
set EODNUM=!SAGE:~4,4!
for /f "tokens=* delims= " %%A in (%%P) do (
echo %EODNUM%
set S=%%A
***This line is the problem***
set S=!S:%T_DAY%=%EODNUM%!
echo.!S! >> %PATH%\TEST\!SAGE2!.csv
)
)
endlocal
我期望这将获取 csv 文件的每一行并将其替换为自身,除了用变量 EODNUM 替换当前日期的字符串(它确实......只有变量在设置之前被扩展,所以没什么)...延迟扩展应该可以解决这个问题,但是我可以使用这行代码
set S=!S:%T_DAY%=!EODNUM!!
因为我认为它太多了!对于 CMD 来说。
我错过了什么,还是有更好的方法来编码?(我不是任何类型的程序员,我编写的大部分代码都来自反复试验,并从其他脚本中“借用”,所以这可能是一种非常混乱的方式)。