cmd遍历文件之for
最近想把某项目下的文件遍历执行,因为只执行固定格式的文件,比如node执行js文件,那么需要遍历所有js文件,所以想分两步走,第一步循环遍历所有js文件名称并写入txt文件中,第二步读取txt文件并循环执行。
前提,我是写在bat文件中的,所以有一些注意事项要备注下。
windows中的bat文件注释行不是#,而是分为关键字双冒号(::)和@REM,手写感觉双冒号更美观,但用快捷键注释默认加的是@REM关键字。后来发现在例如for循环中使用::会导致异常,而使用@REM没问题。
windows中bat文件首行不需要#! /bin/bash
cmd中有可以直接列出某目录下文件的指令dir,而且默认是换行的,简便!关于dir的参数有/B /S /O /A(备注:cmd中不区分大小写),可以参考文章:https://blog.csdn.net/wzj_110/article/details/116844812
:: 输出文件夹下所有文件夹和文件到txt dir /b >2022list.txt
指定文件类型:
:: 输出js文件 dir /b *.js >2022list.txt
然后读取txt文件,并循环执行,cmd中循环用的也是for。
:: 读取文件并按行输出 @echo off for /f %%i in (2022list.txt) do ( echo %%i node %%i >> 2022_log/out/%%i.txt 2>> 2022_log/error/%%i.txt )
注意:cmd中直接输入命令的话写一个%就行,但在bat脚本中需要写两个百分号%%
@echo off可以不输出命令行本身。
在执行某命令时出现了错误:ECHO 处于关闭状态,现在没有复现,找了解答说要加setlocal enabledelayedexpansion,没复现,以后遇到再记录吧,可参考:https://blog.csdn.net/qq_39648255/article/details/120180948 。
今天又突然想,能不能直接用for循环遍历文件,就不用先输出名称到txt文件了。
然后研究了下for,发现可行。
cmd中的for参数有/D /R /L /F,可以多个参数一起用,可以参考:http://wjhsh.net/MCSFX-p-12799505.html 。
for /R [path] %%variable in (set) do cmd 循环遍历所有子文件夹和文件 for /D [path] %%variable in (set) do cmd 只循环遍历文件夹 for /L %%variable in(Start#,Step#,End#) do cmd 迭代数值范围 for /F 遍历当前目录所有文件和文件夹,有三种用法 for /F ["options"] %%i IN (file) DO cmd for /F ["options"] %%i IN ("string") DO cmd for /F ["options"] %%i IN ('cmd') DO cmd
我的需求直接用
:: 直接遍历文件夹下某类型文件 for %%i in (*.js)do echo %%i>>a.txt pause
神奇不神奇,不加任何参数即可!!!!
关于for /f 还有特殊的技能:Delim、Tokens、skip,具体可以参考文章:https://blog.csdn.net/qq1195365047/article/details/127023833
哦,有个很扯淡的事,win10现在文件夹中右键默认启动的cmd是powershell,但是很多命令在powershell中都无法执行,比如dir /b就报错,以前还可以通过修改注册表自己改成cmd,现在好像都没法改了,也不知道微软干啥玩意。。。