• [技术干货] bat 脚本常见的用途
    BAT脚本(批处理脚本)在Windows操作系统中能够执行多种任务,主要用于自动化和批量处理。以下是一些BAT脚本可以完成的具体事项:文件管理:复制、移动、重命名、删除文件。批量处理文件,如统一修改文件格式、重命名等。查找、替换文件内容。目录(文件夹)管理:创建、删除目录。遍历目录结构,对目录中的文件或子目录进行操作。系统配置:修改系统环境变量。修改注册表项。配置网络参数,如IP地址、DNS等。程序自动化:自动运行外部程序或脚本。传递参数给外部程序。定时启动或关闭程序。系统维护:清理临时文件、缓存等无用数据。定时备份文件或执行其他维护任务。检查磁盘状态,进行磁盘整理等。软件安装与卸载:自动化安装或卸载软件。配置软件安装参数。用户交互:提示用户输入信息,并根据输入执行相应操作。显示消息或进度条,提供操作反馈。网络命令:进行网络连接测试、名称解析等。传输文件,如使用FTP进行文件上传或下载。管理用户账户和网络权限。调用其他脚本或程序:在BAT脚本中调用其他BAT脚本或外部程序。通过嵌套调用实现复杂的任务流程。系统控制:关机、重启计算机。控制系统电源设置。此外,BAT脚本还支持变量、循环、条件判断等编程结构,使得脚本能够处理更加复杂的任务。然而,需要注意的是,BAT脚本的能力相对有限,对于更复杂的任务和功能,可能需要使用其他编程语言或工具。同时,在使用BAT脚本时也需要小心,确保脚本执行的命令和操作不会对系统造成意外的影响。总的来说,BAT脚本是一种简单而实用的自动化工具,能够帮助用户更轻松地完成复杂的操作流程,提高工作效率和自动化程度。在企业和个人环境中都有广泛的应用。
  • [技术干货] bat和vbs脚本 的区别
    BAT和VBS是两种不同的脚本语言,各自具有独特的特点和用途。以下是它们之间的主要区别:一、定义与用途BAT脚本:定义:BAT是Windows下的批处理语言,用于将一系列命令组合成一个可执行文件(.bat文件)。用途:主要用于执行命令和自动化任务,适合日常电脑操作,如系统管理、自动化部署、批量处理数据等。VBS脚本:定义:VBS(Visual Basic Scripting Edition)是基于Visual Basic的脚本语言,由微软公司开发。用途:功能更强大,常用于网页编程(如与HTML和ASP结合实现动态网页功能)或系统管理(如操作Windows操作系统的各种功能和资源)。二、执行方式BAT脚本:依赖于CMD命令窗口执行。通过双击.bat文件或在CMD窗口中直接输入文件路径来运行。VBS脚本:基于wscript.exe或cscript.exe程序来运行。可以直接双击.vbs文件运行,也可以使用命令行工具(如cscript)来执行。三、语法与功能BAT脚本:语法相对简单,易于上手。主要包含文件操作命令、目录操作命令等,也能执行外部程序并传递参数。灵活性高,可以根据具体需求进行定制和修改。VBS脚本:语法更接近于Visual Basic,具有更高的可读性和易用性。支持变量、条件语句、循环结构、函数和子过程等常见的编程概念。提供了许多内置的对象和方法,用于简化开发过程。能够调用DLL动态库,实现一些BAT脚本无法完成的功能。四、错误处理与调试BAT脚本:错误处理机制相对简单,通常依赖于命令行的错误输出进行调试。对于复杂的逻辑处理可能较为吃力。VBS脚本:提供了更丰富的错误处理选项,如try...catch语句。可以通过集成开发环境(IDE)进行调试,提高开发效率。五、可移植性与兼容性BAT脚本:与Windows系统高度集成,无需额外安装即可运行。但由于依赖于Windows的CMD命令窗口,因此在其他操作系统上可能无法直接运行。VBS脚本:同样依赖于Windows的脚本引擎(如wscript.exe或cscript.exe),因此在其他操作系统上也无法直接运行。但由于VBS脚本的语法和功能更强大,因此在一些特定的应用场景下可能具有更高的可移植性和兼容性(例如,通过封装和调用DLL动态库)。综上所述,BAT和VBS脚本在定义、用途、执行方式、语法与功能、错误处理与调试以及可移植性与兼容性等方面都存在明显的区别。选择哪种脚本语言取决于具体的应用场景和需求。
  • [技术干货] bat脚本将指定目录下的所有txt的内容合并成一个txt
    在Windows中,你可以使用批处理(.bat)脚本来将指定目录下的所有.txt文件的内容合并成一个单一的.txt文件。这通常通过for循环和重定向(>>)来实现,以将每个文件的内容追加到目标文件中。以下是一个示例脚本,它将当前目录(或你指定的目录)下的所有.txt文件的内容合并到一个名为merged.txt的新文件中:@echo off setlocal :: 设置目标输出文件 set "outputFile=merged.txt" :: 如果输出文件已存在,则删除它(可选) if exist "%outputFile%" del "%outputFile%" :: 遍历指定目录下的所有.txt文件 :: 注意:下面的示例使用当前目录(.),你可以替换为具体的路径 for %%f in (*.txt) do ( :: 将每个文件的内容追加到输出文件中 type "%%f" >> "%outputFile%" :: 可选:在每个文件之间添加一个空行作为分隔符 echo. >> "%outputFile%" ) :: 提示用户操作已完成 echo 所有.txt文件的内容已合并到 %outputFile% 中。 :: 暂停以便用户查看结果(可选) pause endlocal使用说明:将上述脚本复制到一个新的文本文件中,并将文件保存为.bat扩展名(例如,merge_txt_files.bat)。将该.bat文件放置到包含你想要合并的.txt文件的目录中,或者修改脚本中的for循环以包含正确的文件路径。双击运行.bat文件。脚本将创建一个名为merged.txt的新文件(如果该文件已存在,则会被删除并重新创建),并将指定目录下所有.txt文件的内容合并到这个新文件中。每个文件的内容之间会添加一个空行作为分隔符(这是可选的,如果你不需要分隔符,可以删除echo. >> "%outputFile%"这一行)。脚本运行完成后,会显示一个消息框提示你操作已完成,并且你可以通过按任意键来关闭消息框。请注意,这个脚本假设你想要合并的文件都在当前目录下。如果你想要合并不同目录下的文件,你需要修改for循环中的路径,或者使用cd命令切换到目标目录。此外,如果你的文件名中包含特殊字符(如空格或引号),你可能需要对脚本进行额外的调整以确保正确处理这些文件名。
  • [技术干货] bat批量修改文件名
    在Windows中,你可以使用批处理(.bat)脚本来批量修改文件名。这通常通过for循环和rename(或ren)命令来实现。以下是一个简单的示例脚本,展示了如何批量修改当前目录下所有文件的扩展名,或者根据某种模式来重命名文件。示例1:批量修改文件扩展名假设你想要将当前目录下所有.txt文件的扩展名改为.bak,你可以使用以下脚本:@echo off setlocal enabledelayedexpansion for %%f in (*.txt) do ( set "filename=%%~nf" :: 获取文件名(不含扩展名) ren "%%f" "!filename!.bak" :: 重命名文件 ) echo 所有.txt文件的扩展名已更改为.bak。 pause示例2:根据特定模式批量重命名文件假设你想要将当前目录下所有文件名中的空格替换为下划线(_),你可以使用以下脚本:@echo off setlocal enabledelayedexpansion for %%f in (*) do ( set "filename=%%~nf" :: 获取文件名(不含扩展名) set "extension=%%~xf" :: 获取文件扩展名 set "newfilename=!filename: =_!" :: 将文件名中的空格替换为下划线 ren "%%f" "!newfilename!!extension!" :: 重命名文件 ) echo 所有文件名中的空格已替换为下划线。 pause注意事项备份文件:在运行任何批量重命名脚本之前,请确保你已经备份了重要文件。重命名操作是不可逆的(除非你有备份或能够手动恢复),并且可能会导致文件关联问题或数据丢失(如果重命名了关键的系统文件或应用程序文件)。测试脚本:在正式运行脚本之前,最好在一个包含测试文件的文件夹中先进行测试,以确保脚本按预期工作。启用延迟变量扩展:在上面的脚本中,setlocal enabledelayedexpansion 是必需的,因为它允许我们在for循环内部使用!variable!语法来正确解析变量。如果不启用延迟变量扩展,变量将不会在循环内部被更新。路径问题:如果你的脚本需要在特定路径下运行,请确保在for循环中使用完整路径或切换到目标目录(使用cd命令)。特殊字符:文件名中可能包含特殊字符,这些字符在批处理脚本中可能需要特殊处理(例如,使用引号括起来)。管理员权限:在某些情况下,你可能需要管理员权限来重命名系统文件或受保护的文件。将上述脚本保存为.bat文件,然后双击运行即可。确保在运行脚本之前,你已经将脚本文件放置在了你想要修改文件名的目录中,或者根据需要修改脚本中的路径。
  • [技术干货] 鸿蒙项目中 EntryAbility 与 EntryBackupAbility 的区别
    在鸿蒙(HarmonyOS)系统中,EntryAbility 和 EntryBackupAbility 是两种不同类型的Ability,它们分别继承自 UIAbility 和 BackupExtensionAbility,并在应用中扮演着不同的角色。EntryAbility extends UIAbility定义与用途:EntryAbility 继承自 UIAbility,是一个包含UI的应用组件,主要用于与用户进行交互。它通常作为应用的入口点,包含应用的入口界面、入口图标和主功能特性。生命周期:EntryAbility 类提供了一系列生命周期回调,如 onCreate()、onWindowStageCreate()、onForeground()、onBackground() 和 onDestroy() 等,用于在不同状态下执行相应的操作。文件位置:在鸿蒙项目中,EntryAbility 文件通常位于 src/main/ets/entryability/ 目录下。编译与打包:EntryAbility 所在的Module编译后会生成一个entry类型的HAP(Harmony Ability Package),这是应用安装和运行的基本单元。EntryBackupAbility extends BackupExtensionAbility定义与用途:EntryBackupAbility 继承自 BackupExtensionAbility,用于提供应用的扩展备份恢复能力。它不是应用的入口点,而是作为应用数据备份和恢复的一个扩展功能。功能与特性:EntryBackupAbility 允许应用在需要时备份其数据,并在恢复时重新加载这些数据。这对于保护用户数据和确保应用在不同设备或不同时间点的数据一致性非常重要。文件位置:在鸿蒙项目中,EntryBackupAbility 文件通常位于 src/main/ets/entrybackupability/ 目录下(注意,这个路径可能因项目结构和配置的不同而有所变化)。编译与打包:虽然 EntryBackupAbility 也是一个Ability,但它通常不会单独编译成一个HAP包。相反,它可能会作为应用主模块(即entry类型的HAP)的一部分进行编译和打包。区别总结用途不同:EntryAbility 是应用的入口点,主要用于与用户交互。EntryBackupAbility 提供应用的备份恢复能力,不是用于与用户交互的入口点。继承关系不同:EntryAbility 继承自 UIAbility。EntryBackupAbility 继承自 BackupExtensionAbility。生命周期与回调:EntryAbility 有一系列与UI交互相关的生命周期回调。EntryBackupAbility 的生命周期可能与数据备份和恢复操作相关,但通常不会涉及UI交互。文件位置与编译打包:EntryAbility 文件通常位于 entryability 目录下,并编译成一个entry类型的HAP。EntryBackupAbility 文件可能位于 entrybackupability 目录下(具体路径可能因项目而异),并通常作为应用主模块的一部分进行编译和打包。综上所述,EntryAbility 和 EntryBackupAbility 在鸿蒙系统中扮演着不同的角色,具有不同的用途和特性。
  • [技术干货] bat脚本,根据用户输入执行不同处理逻辑
    在批处理(.bat)脚本中,你可以使用 set /p 命令来提示用户输入,然后根据用户的输入执行不同的处理逻辑。以下是一个简单的示例脚本,它根据用户输入的选项执行不同的命令:@echo off :main cls echo 请选择一个选项: echo 1. 选项一 echo 2. 选项二 echo 3. 选项三 echo 4. 退出 set /p userInput=请输入你的选择(1-4): if "%userInput%"=="1" goto optionOne if "%userInput%"=="2" goto optionTwo if "%userInput%"=="3" goto optionThree if "%userInput%"=="4" goto exitScript echo 无效的选择,请重新输入。 pause goto main :optionOne echo 你选择了选项一。 :: 在这里添加选项一的处理逻辑 pause goto main :optionTwo echo 你选择了选项二。 :: 在这里添加选项二的处理逻辑 pause goto main :optionThree echo 你选择了选项三。 :: 在这里添加选项三的处理逻辑 pause goto main :exitScript echo 脚本已退出。 exit /b在这个脚本中:@echo off 关闭了命令回显,这样用户就不会看到每个命令的执行。cls 清除了屏幕上的内容,以便每次显示选项时都有一个干净的界面。set /p userInput=... 提示用户输入,并将输入的值存储在 userInput 变量中。if 语句用于检查用户的输入,并根据输入的值跳转到相应的标签(:optionOne、:optionTwo、:optionThree 或 :exitScript)。每个选项的标签下都有相应的处理逻辑(在这个例子中,只是简单的 echo 语句)。pause 命令用于在每个选项后暂停脚本执行,以便用户可以看到输出,并有机会阅读任何指令或结果。goto main 将脚本的控制流返回到主菜单,以便用户可以选择另一个选项或退出脚本。:exitScript 标签用于退出脚本。exit /b 命令用于退出批处理脚本,但不关闭命令提示符窗口。你可以根据需要修改这个脚本,添加更多的选项或更复杂的处理逻辑。
  • [技术干货] bat 脚本显示处理的进度条
    在批处理(.bat)脚本中显示处理的进度条可以通过多种方式实现,具体取决于你想要的进度条的类型(例如,文本模式、图形模式)和复杂性。下面是一个简单的文本模式进度条示例,它使用循环和基本的文本输出来显示进度。@echo off setlocal enabledelayedexpansion :: 设置变量 set "totalSteps=10" :: 总步骤数,根据你的实际处理步骤数进行调整 set "progressBar=" :: 初始化进度条字符串 :: 显示进度条的函数 :ProgressBar set "percentCompleted=!stepNum! / !totalSteps! * 100" set /a percentCompleted=!percentCompleted:~0,4! :: 保留两位小数(实际上是四位,但后面两位是0) for /l %%i in (1,1,!stepNum!) do set "progressBar=!progressBar![" for /l %%i in (!stepNum!+1,1,!totalSteps!) do set "progressBar=!progressBar! " echo 处理中... !percentCompleted!%% !progressBar:~0,%totalSteps%+[ goto :eof :: 主处理循环 for /l %%s in (1,1,%totalSteps%) do ( set "stepNum=%%s" call :ProgressBar :: 在这里放置你的实际处理代码 :: 例如,模拟处理延迟: ping -n 2 localhost >nul ) echo 处理完成! endlocal pause exit /b :eof exit /b在这个脚本中:totalSteps 变量设置了总的处理步骤数。progressBar 变量用于构建进度条字符串。:ProgressBar 是一个子例程(也称为标签或函数),它计算当前完成的百分比并构建进度条。主处理循环使用 for /l 循环遍历每个步骤,调用 :ProgressBar 子例程来显示进度,并执行实际的处理代码(在这个例子中是模拟处理延迟的 ping 命令)。进度条是通过在命令行中打印一系列方括号([)和空格来创建的,其中方括号的数量表示已完成的步骤数。请注意,这个脚本中的进度条是文本模式的,并且是基于字符的简单表示。如果你需要更复杂的图形进度条或跨平台的解决方案,你可能需要考虑使用其他脚本语言(如PowerShell)或第三方工具。此外,由于批处理脚本的限制,这个进度条可能不会非常精确或平滑地更新,特别是在处理大量步骤或长时间运行的任务时。如果你需要更精确的进度反馈,你可能需要考虑使用更高级的脚本语言或编程环境来编写你的任务。
  • [技术干货] dos命令中的 start cmd命令及参数/k /s 详解
    在DOS和Windows命令提示符(CMD)环境中,start 命令用于启动一个单独的窗口来运行指定的程序或命令。start 命令非常有用,特别是当你想要在不关闭当前命令提示符窗口的情况下运行另一个程序时。start 命令的基本语法如下:start ["title"] [/d path] [/i] [/min] [/max] [/separate | /shared] [/low | /belownormal | /abovenormal | /high | /realtime] [/wait] [/b] [/e:on | off] "command" [parameters]但是,你提到的 /k 和 /s 参数并不是 start 命令的标准参数。实际上,这些参数更常见于与CMD窗口交互的其他命令或上下文中,比如 cmd 命令本身。不过,为了完整性,我会解释 cmd 命令的 /k 和 /c 参数(注意是 /c 而不是 /s),以及 start 命令的一些常用参数。cmd 命令的 /k 和 /c 参数/k:执行指定的命令,但保持CMD窗口打开。这对于运行需要交互的脚本或命令特别有用。/c:执行指定的命令,然后终止CMD窗口。这是运行一次性命令时的默认行为。例如:cmd /k dir # 显示当前目录的内容,并保持CMD窗口打开。 cmd /c dir # 显示当前目录的内容,然后关闭CMD窗口。start 命令的常用参数["title"]:指定新窗口的标题。如果标题包含空格,则需要用引号括起来。/d path:指定启动目录。/i:在新的环境中启动程序(即使用新的环境变量)。/min:以最小化窗口启动程序。/max:以最大化窗口启动程序。/wait:启动程序并等待其退出,然后返回命令提示符。/b:在不创建新窗口的情况下启动程序。程序将在当前CMD窗口的后台运行(如果可能)。使用 start 命令启动CMD窗口如果你想使用 start 命令启动一个新的CMD窗口,你可以这样做:start cmd # 启动一个新的CMD窗口(默认行为)。 start cmd /k # 启动一个新的CMD窗口,并保持打开状态(等待用户输入)。 start cmd /c echo Hello, World! # 启动一个新的CMD窗口,显示"Hello, World!",然后关闭。但是,请注意,由于 /k 和 /c 是 cmd 命令的参数,而不是 start 命令的参数,因此你需要将它们与 cmd 命令一起使用,如上所示。如果你尝试将 /k 或 /c 直接作为 start 命令的参数(例如 start /k cmd),它们将不会被正确解释,因为 start 命令没有这些参数。相反,你应该将它们作为要启动的 cmd 命令的参数提供。
  • [技术干货] bat脚本文件中以管理员身份运行指定的程序
    在Windows批处理(.bat)脚本中,如果你需要以管理员身份运行指定的程序,你可以使用内置的runas命令或者创建一个快捷方式并配置它以管理员身份运行,然后通过脚本启动这个快捷方式。不过,runas命令通常需要用户输入管理员密码,这在自动化脚本中通常是不方便的。一个更实用的方法是使用Windows任务计划程序(Task Scheduler)来创建一个计划任务,该任务配置为以管理员身份运行,并通过批处理脚本触发这个任务。但是,这种方法相对复杂,并且需要预先设置。对于简单的场景,如果你的脚本是为了在本地计算机上以管理员身份运行某个程序,并且你希望用户能够轻松地通过右键点击“以管理员身份运行”来执行脚本,你可以将以下代码添加到你的批处理脚本的开头,它会提示用户以管理员身份重新启动脚本(如果用户当前不是以管理员身份运行的话):@echo off :: BatchGotAdmin :------------------------------------- REM --> Check for permissions >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" REM If error flag set, we do not have admin. if '%errorlevel%' NEQ '0' ( echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs" echo UAC.ShellExecute "cmd.exe", "/c """"%~s0""""", "", "runas", 1 >> "%temp%\getadmin.vbs" "%temp%\getadmin.vbs" exit /B ) :---------------------------------------- REM --> If running as admin, proceed :: Your code here echo Now running as admin. start "" "C:\Path\To\Your\Program.exe" pause在这个脚本中:使用cacls.exe命令尝试访问一个需要管理员权限的系统文件,以检查当前用户是否具有管理员权限。如果当前用户没有管理员权限(%errorlevel%不等于0),则创建一个VBScript(%temp%\getadmin.vbs),该脚本使用Shell.Application对象的ShellExecute方法以管理员身份重新启动批处理脚本。如果脚本已经以管理员身份运行,则继续执行后面的代码(在这里是启动指定的程序)。请注意,这种方法会弹出一个UAC(用户帐户控制)提示,要求用户确认以管理员身份运行脚本。这是Windows安全模型的一部分,用于防止未经授权的程序以高权限运行。另外,记得将C:\Path\To\Your\Program.exe替换为你想要以管理员身份运行的程序的实际路径。start ""命令中的第一个参数是一个空字符串,它是必需的,以避免将接下来的参数解释为窗口标题。
  • [技术干货] bat脚本下载文件到指定目录
    在Windows批处理(.bat)脚本中,下载文件到指定目录通常需要使用支持HTTP或HTTPS协议的命令行工具。最常用的工具之一是curl,它是一个强大的命令行数据传输工具,支持多种协议,包括HTTP、HTTPS、FTP等。首先,你需要确保你的系统上安装了curl。在Windows 10及更高版本中,curl已经作为预安装的工具包含在系统中。对于旧版本的Windows,你可以从curl的官方网站下载并安装它。以下是一个使用curl从URL下载文件到指定目录的批处理脚本示例:@echo off setlocal :: 设置变量 set "url=http://example.com/path/to/your/file.zip" set "destinationDir=C:\path\to\your\destination\directory" set "fileName=file.zip" :: 如果URL中不包含文件名,你可以在这里指定 :: 确保目标目录存在 if not exist "%destinationDir%" ( mkdir "%destinationDir%" ) :: 构造完整的目标文件路径 set "targetFile=%destinationDir%\%fileName%" :: 使用curl下载文件 curl -o "%targetFile%" "%url%" :: 检查下载是否成功 if %errorlevel% neq 0 ( echo 下载失败! exit /b %errorlevel% ) else ( echo 文件已成功下载到 %targetFile% ) endlocal pause在这个脚本中:url 变量包含了你要下载的文件的URL。destinationDir 变量指定了文件应该被下载到的目录。fileName 变量指定了下载后的文件名(如果URL中已经包含了文件名,你可以省略这个变量,直接在targetFile变量中使用%%~nxi从URL中提取文件名和扩展名)。脚本首先检查目标目录是否存在,如果不存在则创建它。然后,它构造了完整的目标文件路径,并使用curl -o选项指定了下载文件的输出路径。最后,脚本检查curl命令的退出代码来确定下载是否成功,并相应地输出消息。请注意,如果URL中已经包含了文件名,并且你想要保留原始的文件名,你可以修改targetFile变量的设置方式,如下所示::: 从URL中提取文件名和扩展名(假设URL以文件名结尾) for %%f in ("%url%") do set "fileName=%%~nxf" set "targetFile=%destinationDir%\%fileName%"然而,请注意这种方法可能不适用于所有URL(特别是那些包含查询参数或路径中包含多个文件名的URL)。在这种情况下,你可能需要手动指定fileName变量。
  • [技术干货] bat 脚本提取出指定目录中包含test的所有文件
    在Windows批处理(.bat)脚本中,直接进行不区分大小写的字符串比较是比较困难的,因为Windows的命令行环境默认是区分大小写的。但是,你可以通过一些技巧来实现这个功能,比如使用for循环结合dir命令和findstr命令(尽管findstr本身也是区分大小写的,但我们可以利用它来处理文件名的一部分),或者通过调用外部工具如PowerShell。不过,对于简单地提取包含特定字符串(不区分大小写)的文件名,我们可以使用where命令(在Windows Vista及更高版本的Windows中可用),它支持不区分大小写的搜索。但是,where命令本身并不直接支持在文件名中进行模式匹配,所以我们通常会用它来搜索文件内容。为了搜索文件名,我们需要结合其他方法,比如使用dir然后通过findstr过滤(尽管这不是真正的不区分大小写文件名搜索)。然而,为了真正实现不区分大小写的文件名搜索,我们可以使用PowerShell脚本,然后通过批处理文件调用它。以下是一个示例,展示了如何在批处理文件中调用PowerShell脚本来提取包含"test"(不区分大小写)的文件名:@echo off setlocal set "searchDir=C:\path\to\your\directory" set "searchString=test" for /f "delims=" %%i in ('powershell -command "Get-ChildItem -Path '%searchDir%' -Recurse -File | Where-Object { $_.Name -imatch '%searchString%' } | Select-Object -ExpandProperty FullName"') do ( echo %%i ) endlocal pause在这个脚本中:searchDir 是你要搜索的目录。searchString 是你要搜索的字符串(在这个例子中是"test")。powershell -command "..." 部分调用了PowerShell脚本,该脚本使用Get-ChildItem(别名ls或dir)递归地搜索目录中的文件,并使用Where-Object过滤出文件名匹配(不区分大小写,由-imatch参数指定)的文件。然后,它使用Select-Object -ExpandProperty FullName来获取这些文件的完整路径。for /f "delims=" %%i in ('...') do (...) 循环遍历PowerShell命令的输出,并将每个文件名打印到控制台。请注意,这个脚本假设你的系统上已经安装了PowerShell,并且你的批处理文件有足够的权限来调用它。此外,由于PowerShell脚本是在单引号内执行的,因此你需要确保路径和字符串中没有单引号,或者对它们进行适当的转义。如果你不能使用PowerShell,并且你的需求仅限于简单的文件名匹配(不考虑子目录),你可能需要编写一个更复杂的批处理脚本,该脚本会遍历目录中的每个文件,并使用findstr /i(尽管findstr是用于搜索文件内容的,但你可以通过一些技巧来模拟文件名搜索,比如将文件名写入临时文件然后搜索这些文件)。然而,这种方法既笨拙又效率低下,因此通常建议使用PowerShell或其他更强大的脚本语言来处理这种任务。
  • [技术干货] bat 脚本批量复制文件,并加上版本号和日期后缀
    你可以使用批处理文件(.bat)来实现将一个文件复制到指定目录,并在文件名后加上版本号和日期后缀。以下是一个示例脚本,展示了如何实现这个功能:@echo off setlocal enabledelayedexpansion :: 设置变量 set "source_file=C:\path\to\your\source\file.txt" set "target_dir=C:\path\to\your\target\directory" set "version=1.0" :: 获取当前日期,格式为YYYYMMDD for /f "tokens=2 delims==" %%i in ('wmic os get localdatetime /value') do set datetime=%%i set "datestamp=%datetime:~0,4%%datetime:~4,2%%datetime:~6,2%" :: 构造目标文件名 set "filename=%~nx0_v!version!_!datestamp!" set "target_file=%target_dir%\%filename%" :: 复制文件并添加后缀 copy "%source_file%" "%target_file%" :: 输出结果 echo 文件已复制到: %target_file% endlocal pause脚本说明:设置变量:source_file:源文件路径。target_dir:目标目录路径。version:版本号。获取当前日期:使用 wmic os get localdatetime /value 命令获取当前日期和时间,并将其转换为 YYYYMMDD 格式。构造目标文件名:使用 %~nx0 提取源文件的名称和扩展名(不过这里应该使用 %~nxsource_file% 替代 %~nx0 以正确提取 source_file 的名称和扩展名,因为 %~nx0 是批处理文件本身的名称和扩展名)。将版本号和日期后缀添加到文件名中。复制文件:使用 copy 命令将源文件复制到目标目录,并命名为新的文件名。输出结果:输出文件复制到的路径。暂停:使用 pause 命令暂停脚本执行,以便查看输出结果(可选)。注意事项:确保 source_file 和 target_dir 变量设置为正确的路径。wmic 命令在某些情况下可能需要管理员权限运行。如果文件名中包含特殊字符或空格,可能需要对路径进行适当处理。你可以将上述脚本保存为一个 .bat 文件,然后双击运行它。这样,指定的文件就会被复制到目标目录,并带有版本号和日期后缀。
  • [技术干货] 使用bat脚本替换并启动程序
    先上代码@echo off timeout /T 1 /NOBREAK del /f /q /a %1\app.asar ren %1\update.asar app.asar start "" %2这个是一个批处理脚本,下面我会为你逐行解释:@echo off: 这个命令是用来关闭命令的回显功能,使得脚本在执行时不会显示每一条命令,使输出更整洁。timeout /T 1 /NOBREAK: 这个命令会使脚本暂停1秒。/NOBREAK参数表示在等待期间不会响应键盘输入。del /f /q /a %1\app.asar: 这个命令会删除名为app.asar的文件,该文件位于参数%1指定的目录下。其中:/f 强制删除只读文件。/q 安静模式,不询问确认。/a 根据属性选择要删除的文件,这里没有指定属性,所以会删除所有文件。ren %1\update.asar app.asar: 这个命令会将位于参数%1指定目录下的update.asar文件重命名为app.asar。start "" %2: 这个命令会启动一个新的窗口并运行参数%2指定的程序或文件。这里的%2是一个未在此脚本中定义的变量,它应该在执行此脚本时作为参数提供。总体来说,这个脚本的目的是先等待1秒,然后删除某个目录下的旧版本app.asar文件,将更新版本的update.asar重命名为app.asar,并启动一个新的窗口来运行指定的程序或文件。
  • [技术干货] bat 获取文件目录
    在 Windows 系统中,可以使用 dir 命令来获取指定目录下的文件目录。使用 dir 命令获取当前目录下的文件目录:@echo off dir /b /ad/b 参数用于仅显示目录的名称,去除其他信息。/ad 参数用于仅显示目录而不包括文件。使用 dir 命令获取指定目录下的文件目录:@echo off set "directory=C:\Path\To\Directory" // 替换为指定目录的路径 dir /b /ad "%directory%"set 命令用于设置变量 directory 的值为指定目录的路径。%directory% 表示使用变量的值作为参数传递给 dir 命令。使用 for /d 循环遍历获取当前目录下的文件目录:@echo off for /d %%d in (*) do ( echo %%d )for /d 命令用于遍历当前目录下的目录。%%d 表示当前目录的每个子目录。echo %%d 用于输出每个子目录的名称。使用 for /d 循环遍历获取指定目录下的文件目录:@echo off set "directory=C:\Path\To\Directory" // 替换为指定目录的路径 for /d %%d in ("%directory%\*") do ( echo %%d )set 命令用于设置变量 directory 的值为指定目录的路径。%directory% 表示使用变量的值作为路径传递给 for /d 命令。echo %%d 用于输出每个子目录的名称。以上是几种用于在批处理脚本中获取文件目录的方法,可以根据具体需求选择适合的方法。
  • [技术干货] bat打印程序总共执行时长
    在Windows批处理(batch)文件中,我们可以使用%time%变量来打印出程序的执行时间。以下是一些可能的解决方案:解决方案1:在批处理脚本的开始和结束时打印时间。@echo off echo Start Time: %time% :: Your code here timeout /t 10 echo End Time: %time%解决方案2:计算执行时间的差异。@echo off set start_time=%time% :: Your code here timeout /t 10 set end_time=%time% set /a start_seconds=%start_time:~6,2%*3600 + %start_time:~3,2%*60 + %start_time:~0,2% set /a end_seconds=%end_time:~6,2%*3600 + %end_time:~3,2%*60 + %end_time:~0,2% set /a elapsed_seconds=%end_seconds%-%start_seconds% echo Total Elapsed Time: %elapsed_seconds% seconds注意:上述代码假设执行时间不会跨过午夜(即小时数不会从23变到0)。如果可能发生这种情况,你需要在计算开始和结束时间时考虑这一点。解决方案3:使用PowerShell命令。@echo off powershell -Command "& { $start = Get-Date; Start-Sleep -Seconds 10; $end = Get-Date; $end - $start }"这个解决方案使用PowerShell的Get-Date命令来获取当前日期和时间,然后使用Start-Sleep命令等待10秒。最后,它计算开始和结束时间的差异。以上就是一些可能的解决方案。你可以根据你的实际需求选择最适合你的解决方案。
总条数:16 到第
上滑加载中