道歉(如果有重复的话),但到目前为止没有其他答案有帮助。
我要做的就是遍历文件夹中的文件,然后重命名文件/扩展名的最后一部分。
简单地说-可能有1-90个文件,[文件名] _01-[文件名] _90,并且每天(通过Windows事件计划程序)该数字必须增加一。
我似乎无能为力。
当文件达到某些里程碑(30-60-90)时,文件的行为也应稍有不同,但是我相信,如果变量正确更新,这应该已经可以工作。
我已经尝试了很多变量寻址的可能组合(!variable!/%variable%/ etc。),尽管我可以进入循环,但它不会重复,也不会更新文件末尾的变量号。
SetLocal EnableDelayedExpansion
set cnt=0
for %%A in (*) do set /a cnt+=1
set /A fileNumber = %cnt%-1
set /A newFileNumber = %cnt%
echo %fileNumber%
echo %newFileNumber%
for /l %%F in (%fileNumber%,1,1) do (
if %newFileNumber%==90 (
ren "*_%fileNumber%.don" "*_%newFileNumber%.csv"
)
if %newFileNumber%==60 (
ren "*_%fileNumber%.don" "*_%newFileNumber%.csv"
)
if %newFileNumber%==60 (
"ren *_%fileNumber%.don" "*_%newFileNumber%.csv"
)
ren "*_%fileNumber%.don" "*_%newFileNumber%.don"
set fileNumber=%fileNumber%-1
set newFileNumber=%newFileNumber%-1
)
这应该简单地更新目录中的所有文件,使文件名增加1。如果有人能指出我要去哪里,我将非常感激。
答案 0 :(得分:0)
要进行数学运算,您必须将/A
与SET
一起使用
SET x=1
SET /A x=%x%+1
ECHO %x%
/ A开关指定等号右边的字符串 是要计算的数值表达式。表达式评估器 非常简单,并支持以下操作 优先顺序:
对于嵌套变量,您需要使用!
而不是%
SetLocal EnableDelayedExpansion
Setlocal EnableDelayedExpansion
for /f %%G in ("abc") do (
set _demo=%%G & echo !_demo!
)
答案 1 :(得分:0)
@ECHO OFF
SetLocal EnableDelayedExpansion
:: target directory name in variable for convenience.
SET "targetdir=U:\sourcedir"
:: switch to target directory
pushD "%targetdir%"
:: Start count at 100 so that it is 3 digits long
set cnt=100
dir
for %%A in (*) do set /a cnt+=1
set /A fileNumber = %cnt%
set /A newFileNumber = %cnt%+1
:: echoing last 2 characters (will be digits) of variables
echo %fileNumber:~-2% (%filenumber%)
echo %newFileNumber:~-2% (%newfilenumber%)
:: Assign %%F to values 100+actual descending by 1 to 101
for /l %%F in (%fileNumber%,-1,100) do (
rem note need REM remarks within the loop
REM use !varname! for current value of variable VARNAME
if !newFileNumber:~-2!==90 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
if !newFileNumber:~-2!==60 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
if !newFileNumber:~-2!==30 (
ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.csv"
)
rem Since you've just renamed (eg) _59.don to _60.csv, _59.don is missing
IF EXIST "*_!fileNumber:~-2!.don" ECHO ren "*_!fileNumber:~-2!.don" "*_!newFileNumber:~-2!.don"
set /A fileNumber=fileNumber-1
set /A newFileNumber=newFileNumber-1
)
:: return to original directory
popd
GOTO :EOF
仅出于测试目的ECHO
对所需的REN命令进行了处理。 验证命令正确无误后,将ECHO REN
更改为REN
,以实际重命名文件。
不幸的是,您已经向我们展示了如何无法进行一些含糊的操作。因此,我们需要弄清楚您打算做什么,这是更多的工作,并且容易追逐野鹅。
您没有说要处理文件* _90,所以我们在这里无能为力。
您似乎想将* _59.don更改为* _60.csv,但是您的重命名希望将* _60.DON更改为下一次调用,因此除非名称已从_ * 60.CSV更改回* _60 .DON,这行不通。
请注意,此例程的基础是使用变量的最后两个字符。这是为了容纳您所说的编号方案中的前导0
。
通常的做法是假设您将对测试目录执行任何例程以进行验证。
请注意,每个REN
都是ECHO
,因此它不被执行,仅被报告。将ECHO REN
更改为REN
以实际执行命令。
还请注意,批处理在很大程度上不区分大小写。这意味着除非您愿意,否则不必耗尽SHIFT键。