在批处理文件中怎么使用嵌套for命令?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在批处理文件中怎么使用嵌套for命令?相关的知识,希望对你有一定的参考价值。

高级的办法(不用重复执行命令):
比如当前文件夹内所有的jpg文件依次按照1.txt里每行的内容重命名

setlocal enabledelayedexpansion

REM 保存dir的结果到变量a.1,a.2,...,总个数存到变量a.num
set "num=0"
for /f "delims=" %%i in ('dir /o:n /a:-d /b "*.jpg"') do (
set /a "num=!num!+1"
set "a.!num!=%%i"
)
set "a.num=!num!"
REM 保存type的结果
set "num=0"
for /f "delims=" %%i in ('type 1.txt') do (
set /a "num=!num!+1"
set "b.!num!=%%i"
)
set "b.num=!num!"
REM 进行操作
for /l %%i in (1,1,!a.num!) do (
if %%i leq !b.num! ren "!a.%%i!" "!b.%%i!"
)
REM 清除临时变量
for /l %%i in (1,1,!a.num!) do (
set "a.%%i="
)
for /l %%i in (1,1,!b.num!) do (
set "b.%%i="
)
pause
参考技术A for %%a in (c d e f g) do (
for /f %%b in ('dir /ad /b /s "%%a:\*.bat"') do (
echo %%b
)
)
pause

这个就是FOR前套,搜索C,D,E,F,G盘下的所有.BAT文件啦

在一行中替换和剪切或嵌套替换(x2)(批处理文件)

【中文标题】在一行中替换和剪切或嵌套替换(x2)(批处理文件)【英文标题】:Replace and cut or nested replace (x2) in one line (batch-file) 【发布时间】:2015-11-22 23:58:10 【问题描述】:

如何在一个命令行中将当前日期和时间转换为不带空格的文件名?

我知道怎么做两行:

set file_name=file_%date%-%time:~0,2%%time:~3,2%%time:~6,2%
rem echo %file_name% return "file_2015-08-01- 85012" and it's not ok 

(包含空格)

set file_name=%file_name: =0%
echo echo %file_name% return "file_2015-08-01-085012" and it's ok

(无空格)

但我无法在 *.bat 文件中运行程序 - 我必须运行“原始”*.exe,这需要一行中的所有参数。

【问题讨论】:

看看这个:***.com/a/19799236/388389 【参考方案1】:
for /f "tokens=1-6 delims=:/- " %a in ('robocopy "|" . /njh^|find "|"') do echo %a-%b-%c-%d%e%f

【讨论】:

它应该作为参数之一传递给*.exe程序。您不能将“for ...”作为参数传递 - 一种解决方案是传递“file_%date%-%time:~0,2%%time:~3,2%%time:~6,2%”,但是我想要“0”而不是“”(空格)。 @jakson,这个想法不是使用exefile for /f ...,而是使用for /b ..... exefile file_%a-%b-%c-%d%e%f。在前面的代码中,将echo 替换为可执行文件

以上是关于在批处理文件中怎么使用嵌套for命令?的主要内容,如果未能解决你的问题,请参考以下文章

在批处理文件中,如果满足一个条件而不是周围的 for 循环,如何突破嵌套的 if 语句?

在一行中替换和剪切或嵌套替换(x2)(批处理文件)

求批处理命令解决多层文件夹嵌套的问题

一段批处理脚本(for 嵌套)

Windows批处理-for命令详解

批处理文件命令,怎样按顺序执行命令?