编辑: 我需要一个bat脚本(或单行)来循环一个作为填充值给出的范围。它会:
例如:start = 0980,end = 1000,step = 1 我需要遍历该范围并给出一个填充号码。
我有这么多,但我一直得到:
function DataSelection($rootScope, CarsService) {
var self = this;
function load() {
self.carslist = [];
return CarsService
.getCars()
.then(function (carslist) {
self.carslist = carslist;
})
.then(CarsService.getCurrent)
.then(function (data) {
self.currentCarIndex = data.index;
$rootScope.currentCarIndex = data.index;
self.car = data.current;
})
.catch(function () {
console.log('There is no car left, this should be disabled!');
location.assign('/#/thank');
});
}
self.loaded = load();
self.updateCars = function () {
return CarsService
.gotoNext()
.then(function (data) {
self.currentCarIndex = data.index;
$rootScope.currentCarIndex = data.index;
self.car = data.current;
})
.catch(function () {
console.log('There is no car left, this should be disabled!');
location.assign('/#/thank');
});
};
self.datalinks = function () {
return self
.loaded
.then(function () {
if (!self.car) {
location.assign('/#/thank');
}
var folderName = self.car.toLowerCase();
var jsonName = self.car.toLowerCase() + '-data.json';
var jsonIntroName = self.car.toLowerCase() + '.json';
var pictureB = '' + 'assets/' + self.car.toLowerCase() + '/' + self.car.toLowerCase() + '_b.jpg' + '';
var pictureL = '' + 'assets/' + self.car.toLowerCase() + '/' + self.car.toLowerCase() + '_l.jpg' + '';
return {
folderName: folderName,
jsonName: jsonName,
jsonIntroName: jsonIntroName,
pictureB: pictureB,
pictureL: pictureL
};
});
};
}
到目前为止我所拥有的:
(
SET VAR=000985
SET VAR=~-4
ECHO
)
ECHO is on.
最终VAR将被输入命令
REM Get the start, end and step values
SET start=0980
SET end=0985
SET step=1
REM Remove Padding
FOR /F "tokens=* delims=0" %%A IN ("%start%") DO (SET start=%%A)
FOR /F "tokens=* delims=0" %%A IN ("%end%") DO (SET end=%%A)
FOR /l %%x in (%start%, %step%, %end%) DO (
SET VAR=000%%x
SET VAR=%VAR:~-4%
ECHO %VAR%
)
答案 0 :(得分:0)
@echo off
setlocal enabledelayedexpansion
REM Get the start, end and step values
SET /a start=980
SET /a end=985
SET /a step=1
REM Remove Padding
FOR /l %%x in (%start%, %step%, %end%) DO (
SET VAR=000%%x
SET VAR=!VAR:~-4!
ECHO !VAR!
)
Delayedexpansion是关键 - 在块语句(a parenthesised series of statements)
中,解析整个块并执行然后。块中的任何%var%
将在解析块时被该变量的值替换 - 在块执行之前 - 同样的事情适用于FOR ... DO (block)
。< / p>
解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion
并使用!var!
代替%var%
来访问已更改的var
或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。
请注意set /a
的使用,因为要分配的值是纯数字。不幸的是,前导零意味着价值为OCTAL
所以处置它们。
关于delayedexpansion的很多关于SO的文章......环顾四周。
答案 1 :(得分:0)
你的问题令人困惑。我不明白你是否需要一个解决方案来执行精确所描述的步骤(unpad值,迭代,重新填充值)或生成一个填充数字列表,无论使用哪种方法;另外,你不显示了所需的输出,所以我假设这是这个列表:0980 0981 0982 0983 0984 0985
。最后,你没有指出填充数字中的位数,所以我假设它是4,输入数据的位数或更多。
这是一个简单的解决方案:
@echo off
setlocal EnableDelayedExpansion
REM Get the start, end and step values as padded numbers
SET start=0980
SET end=0985
SET step=1
rem Convert the start and end values into an equivalent "1+N-digits" number (4 in this case)
rem for example: start=10980 and end=10985
set /A start=1%start:~-4%, end=1%end:~-4%
rem Iterate through the new range: from 10980 step 1 to 10985
for /L %%i in (%start%, %step%, %end%) do (
rem Output the digits after the first one; for example: 0980, 0981, etc
echo !start:~1!
rem Pass to next number
set /A start+=step
)