x*******a 发帖数: 11067 | 1 菜鸟诚惶诚恐地上来请教,花了一天琢磨一个BATCH FILE,就是为了LOOP THROUGH一堆
SUBDIRECTORY,打开每个SUBDIR下面的同一个TEXT文件,然后替换里头的一个参数。
总算是WORK了,但是很多是照葫芦画瓢。特别不明白的是两个
!!中间加一个VARIABLE的名字是啥意思。
特别不明白的是,为啥我不能直接让
%%a=123
echo %%a >>file
必须要让
fa=%%a
set fa=123
echo !fa! >>file
请高手解释一下,谢谢!
程序在下面写的很傻,轻拍。
@echo off
setlocal enabledelayedexpansion
FOR /D %%1 IN ("*") DO (
rem cd to all sub directories
echo %%1
cd %%1
rename OUT.txt OUT.txt1
FOR /F "tokens=1,2,3,4,5,6,7 delims=" %%a IN (OUT.txt1) DO (
set fa=%%a
set fb=%%b
set fc=%%c
set fd=%%d
set fe=%%e
set ff=%%f
set fg=%%g
echo %%a %%b %%c %%d %%e %%f %%g
echo !fa! !fb! !fc! !fd! !fe! !ff! !fg!
rem echo %%a
if !fd!==xxxx set fd=yyyyy
if !fa!==N: echo !fa!\!fb!\!fc!\!fd!\!fe!\!ff!\!fg! >>OUT.txt
if NOT !fa!==N: echo !fa! >>OUT.txt )
cd ..
) |
b********h 发帖数: 119 | 2 !var!是delayed variable expansion,这个你的脚本的第二行就是设置这个东西的。你
可以打set /?看他的帮助,里面有详细的解释。
%%a是循环的变量,是用来取他的值的,而不是赋值的。
【在 x*******a 的大作中提到】 : 菜鸟诚惶诚恐地上来请教,花了一天琢磨一个BATCH FILE,就是为了LOOP THROUGH一堆 : SUBDIRECTORY,打开每个SUBDIR下面的同一个TEXT文件,然后替换里头的一个参数。 : 总算是WORK了,但是很多是照葫芦画瓢。特别不明白的是两个 : !!中间加一个VARIABLE的名字是啥意思。 : 特别不明白的是,为啥我不能直接让 : %%a=123 : echo %%a >>file : 必须要让 : fa=%%a : set fa=123
|
x*******a 发帖数: 11067 | 3 多谢回复。
我读了读还是不大明白,又做了个简单的例子
@echo off
Setlocal EnableDelayedExpansion
Set _var=first
Set _var=second& Echo %_var% !_var!
Set _var=first
Set _var=second
Echo %_var% !_var!
FOR /D %%1 IN ("*") DO (
rem cd to all sub directories
Set _var2=%%1
echo %%1
echo %_var2%)
FOR /D %%1 IN ("*") DO (
rem cd to all sub directories
Set _var2=%%1
echo %%1
echo !_var2!)
结果是:
first second
second second
a
ECHO is off
b
ECHO is off
a
a
b
b
我特别不理解的是为什么会出那个ECHO is off. |
b********h 发帖数: 119 | 4 因为你第一个循环里的
echo %_var2%
实际上执行的是
echo
这个例子本身就很好解释了delay expansion和非delay expansion的区别。
【在 x*******a 的大作中提到】 : 多谢回复。 : 我读了读还是不大明白,又做了个简单的例子 : @echo off : Setlocal EnableDelayedExpansion : Set _var=first : Set _var=second& Echo %_var% !_var! : Set _var=first : Set _var=second : Echo %_var% !_var! : FOR /D %%1 IN ("*") DO (
|