batch-file 相关问题

批处理文件是一个文本文件,其中包含由MS-DOS,IBM OS / 2或Microsoft Windows系统上的命令解释程序执行的一系列命令。

安全密码保护批次

我目前正在制作受密码保护的批处理文件, 问题是,当我输入 @echo on 或 %@echo on% 时,它会显示密码(一会儿,但如果你制作视频,你可以清楚地看到它)。 当我...

回答 1 投票 0

Jenkins 作业因命令中的 for 循环而失败

在 Jenkins 中,我尝试在 BAT 文件中实现几个命令。所以我有 2 个 BAT 文件(RUN.BAT 和 CHANGE.BAT)。在RUN.BAT中,命令如下: 光盘\ 乙: CD E:\结果 目录1

回答 1 投票 0

使用 Batch 解决“findstr”问题

下面,我写了一些代码。它会检测 Micro-SD 卡是否插入计算机,如果插入,它会要求输入您的 PIN 码。输入 PIN 码后,它会在卡片中查找文本文件...

回答 3 投票 0

批处理文件用预定义文本替换文本文件中的特定行[关闭]

我看过类似的问题,但它们似乎对我不起作用,希望简单一些......(对于专家)...... 这是我试图作为批处理文件的一部分进行编辑的配置文件...... 我看过类似的问题,但它们似乎对我不起作用,希望简单一些......(对于专家)...... 这是我试图作为批处理文件的一部分进行编辑的配置文件... <?xml version="1.0" encoding="utf-8"?> <configuration> <userSettings> <Accenda.ICG.EndPoint.Properties.Settings> <setting name="SiteURL" serializeAs="String"> <value>https://nww.rss.scarboroughryedaleccg.nhs.uk/_vti_bin/Accenda.ICG.EndPoint.WCF</value> </setting> <setting name="FilePathToDelete" serializeAs="String"> <value /> </setting> <setting name="WatchPath" serializeAs="String"> <value /> </setting> <setting name="MonitorFolderChoice" serializeAs="String"> <value>True</value> </setting> <setting name="UserName" serializeAs="String"> <value /> </setting> <setting name="Password" serializeAs="String"> <value /> </setting> <setting name="AutoLogin" serializeAs="String"> <value>True</value> </setting> <setting name="PollingIntervalMinutes" serializeAs="String"> <value>5</value> </setting> <setting name="RegistrySettingsImportedToAppConfig" serializeAs="String"> <value>True</value> </setting> </Accenda.ICG.EndPoint.Properties.Settings> </userSettings> </configuration> 对于这里的这一行(或2行)... <setting name="WatchPath" serializeAs="String"> <value /> 无论是空,还是填充“任何文件夹”的路径 我只希望它包含以下内容:- <setting name="WatchPath" serializeAs="String"> <value>C:\Users\Public\Desktop\RSS Referrals</value> 如果该值包含路径,我可以很好地组合使用 findstr 和 FART.exe,但如果它为空,我就陷入困境,非常感谢;-) 代码片段(如果该行包含路径):- for /f "tokens=3 delims=>;<" %%a in ('findstr /C:"C:\Users" "C:\Users\%usr%\AppData\Local\Accenda_Limited\Accenda.ICG.EndPoint.exe_Url_m5l4ujc5t22f3qw0q5uz1dwlfcnrdaoh\1.0.0.15\user.config"') do ( fart -i -c "C:\Users\%usr%\AppData\Local\Accenda_Limited\Accenda.ICG.EndPoint.exe_Url_m5l4ujc5t22f3qw0q5uz1dwlfcnrdaoh\1.0.0.15\user.config" "%%a" "C:\Users\Public\Desktop\RSS Referrals" ) 但是,如果是空的,正如前面提到的,我就卡住了 - 谢谢偷看!!! Windows 命令处理器 cmd.exe 处理批处理文件不适用于文件内容修改任务,尤其不适用于 UTF-8 编码的 XML 文件。 Windows 上默认安装了其他脚本解释器,例如解释 Visual Basic 和 JScript 脚本的 Windows Script Host 以及 PowerShell,它们更适合此类任务。 但是,这里有一个用于此任务的批处理文件。 @echo off setlocal EnableExtensions DisableDelayedExpansion set "ConfigFile=%LOCALAPPDATA%\Accenda_Limited\Accenda.ICG.EndPoint.exe_Url_m5l4ujc5t22f3qw0q5uz1dwlfcnrdaoh\1.0.0.15\user.config" if exist "%ConfigFile%" goto ScanForConfig echo ERROR: File "%ConfigFile%" not found. exit /B 4 :ScanForConfig set "LineNumber=" for /F "delims=:" %%I in ('%SystemRoot%\System32\findstr.exe /L /N /C:"<setting name=\"WatchPath\" serializeAs=\"String\">" "%ConfigFile%" 2^>nul') do set /A LineNumber=%%I + 1 if defined LineNumber goto DesktopFolder echo ERROR: Could not find ^<setting name="WatchPath" serializeAs="String"^> echo in file "%ConfigFile%". exit /B 3 :DesktopFolder rem Determine the common desktop folder directly from Windows registry. rem The first FOR loop is usually enough to get the common desktop folder. set "CommonDesktop=" for /F "skip=1 tokens=1-3*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Desktop" 2^>nul') do if /I "%%I %%J" == "Common Desktop" if not "%%~L" == "" if "%%K" == "REG_SZ" (set "CommonDesktop=%%~L") else if "%%K" == "REG_EXPAND_SZ" call set "CommonDesktop=%%~L" if not defined CommonDesktop for /F "skip=1 tokens=1-3*" %%I in ('%SystemRoot%\System32\reg.exe QUERY "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Common Desktop" 2^>nul') do if /I "%%I %%J" == "Common Desktop" if not "%%~L" == "" if "%%K" == "REG_SZ" (set "CommonDesktop=%%~L") else if "%%K" == "REG_EXPAND_SZ" call set "CommonDesktop=%%~L" if not defined CommonDesktop set "CommonDesktop=\" if "%CommonDesktop:~-1%" == "\" set "CommonDesktop=%CommonDesktop:~0,-1%" if defined CommonDesktop if exist "%CommonDesktop%\" goto ScanForValue if defined PUBLIC if exist "%PUBLIC%\Desktop\" set "CommonDesktop=%PUBLIC%\Desktop" & goto ScanForValue if exist "%SystemDrive%\Users\Public\Desktop\" set "CommonDesktop=%SystemDrive%\Users\Public\Desktop" & goto ScanForValue if defined ALLUSERSPROFILE if exist "%ALLUSERSPROFILE%\Desktop\" set "CommonDesktop=%ALLUSERSPROFILE%\Desktop" & goto ScanForValue echo ERROR: Cannot determine the all users desktop folder. exit /B 2 :ScanForValue set "NewValue=<value>%CommonDesktop%\RSS Referrals</value>" for /F "delims=:" %%I in ('%SystemRoot%\System32\findstr.exe /L /N /C:"%NewValue%" "%ConfigFile%" 2^>nul') do if %LineNumber% == %%I goto NoUpdate rem It is really necessary to update the value in the configuration file. set "TempFile=%ConfigFile%.tmp" (for /F delims^=^ eol^= %%I in ('%SystemRoot%\System32\findstr.exe /N "^" "%ConfigFile%" 2^>nul') do ( set "Line=%%I" setlocal EnableDelayedExpansion for /F "tokens=1,2 delims=:<>/" %%J in ("!Line!") do if not %%J == %LineNumber% ( echo(!Line:*:=! ) else if "%%K" == "value " ( echo(!NewValue! ) else if "%%K" == "value" ( echo(!NewValue! ) else echo(%%K!NewValue! endlocal ))>"%TempFile%" move /Y "%TempFile%" "%ConfigFile%" if not exist "%TempFile%" goto UpdateDone del "%TempFile%" echo ERROR: Failed to modify file "%ConfigFile%". exit /B 1 :NoUpdate echo There is nothing to update. exit /B 0 :UpdateDone echo Configuration update done successfully. endlocal 注意: 仅当 XML 文件 user.config 发布时,此批处理文件才有效,并且在 value 的行下方始终有一行带有标记 <setting name="WatchPath" serializeAs="String"> 的行。 XML 文件内容结果的任何其他变体都可能在执行批处理文件后导致 XML 文件损坏。 请阅读我的答案如何逐行读取和打印文本文件的内容?以获取有关如何完成行替换的信息。 我建议您还阅读维基百科文章,其中描述了预定义的 Windows 环境变量。 我对制作不在当前目录中的目录的回答描述了用于获取桌面文件夹的命令行,在这种情况下,代码被修改为获取所有用户的公共桌面文件夹,而不是用户的桌面文件夹。 如果要修改的值已存在于带有 <setting name="WatchPath" serializeAs="String"> 的行下方,则批处理文件不会修改配置文件。 我建议再次为此任务编写 PowerShell 脚本,而不是使用批处理文件,因为这样会更安全、更快。对于因在更改的 XML 文件内容上使用此批处理脚本而导致的 XML 文件损坏,我不承担任何责任。 要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。 del /? echo /? endlocal /? exit /? findstr /? for /? goto /? if /? move /? rem /? set /? setlocal /? PS:只要找到要更新的文件,该批处理文件甚至可以在 Windows XP 上运行,而默认情况下 %LOCALAPPDATA% 则不然,因为 Windows XP 上默认没有定义环境变量 LOCALAPPDATA,只是在Windows Vista 和更新的 Windows 版本。

回答 1 投票 0

删除文件名中的特定数字[已关闭]

我正在构建一个批处理文件,文件名中可能有也可能没有 10 位数字。如果是 10 位数字,我想删除第一位数字。 更具体地说,领先的麻木......

回答 2 投票 0

从子字符串结果中删除可能的尾随空格

我在批处理脚本方面缺乏经验,刚刚编写了一个脚本,其中枚举了源目录中的所有文件,并且每个文件名字符串都被修剪为其第一个 - 字符。焦油...

回答 2 投票 0

在批处理文件中递归查找FolderName ile.name组合并返回完整路径

我正在寻找递归地在目录中的特定文件夹名称中查找特定文件名,如果存在匹配或多个匹配,则返回完整路径。我正在寻找模式搜索...

回答 2 投票 0

批量从XML获取特定节点标签值

我有一个像这样的 XML 文件: 0 音调 我有一个像这样的 XML 文件: <config> <intensity>0</intensity> <variables> <variable> <name>TONE</name> <value>3</value> <type>UNSIGNED8</type> </variable> <variable> <name>V_SIC</name> <value>0</value> <type>UNSIGNED8</type> </variable> <variable> <name>H_YPE</name> <value>9000</value> <type>INTEGER16</type> </variable> <variable> <name>NUM_SIC</name> <value>0</value> <type>UNSIGNED8</type> </variable> </variables> </config> 我正在尝试将名称为 H_YPE 的节点中的值文本获取到变量中,因此在本例中,变量应该具有 9000。如果节点 H_YPE 不在 XML 上,只需存储 1。 我看到了这个答案并尝试了Magoo实现的内容,虽然我可以看到正在解析这些值,但我感兴趣的是仅获取一个值并将其存储在变量中以供以后使用。 显然我对批处理脚本不太了解,因此我们将不胜感激,提前致谢。 由 Windows 命令处理器处理的批处理文件 cmd.exe 是处理 XML 文件的最差选择,因为没有对真正 XML 处理的内置支持。 如果 XML 文件的结构始终如问题所示,则可以使用以下批处理文件代码。 @echo off setlocal EnableExtensions DisableDelayedExpansion set "Value=1" if not exist "File.xml" goto ProcessValue set "NameTagFound=" for /F "tokens=2,3 delims=<>" %%I in ('%SystemRoot%\System32\findstr.exe /R "<name>H_YPE</name> <value>[0123456789]*</value>" "File.xml"') do ( if "%%I" == "name" ( if /I "%%J" == "H_YPE" set "NameTagFound=1" ) else if defined NameTagFound ( if "%%I" == "value" ( if not "%%J" == "" set "Value=%%J" goto ProcessValue ) ) ) :ProcessValue echo Value is: %Value% endlocal 请注意 XML 文件中数据结构的以下要求: 开始标签<name>和<value>必须留有前导空格/制表符,因为tokens=2,3 delims=<>,并且这两个元素必须位于不包含任何其他元素或属性的单独行上。 具有值 name 的元素 H_YPE 必须仅存在于元素 variable 中,而不能存在于另一个元素中,因为代码不会检查在文件中的位置找到 <name>H_YPE</name>。 具有值 name 的元素 H_YPE 必须位于元素 variable 内,位于元素 value 所在行上方的单独一行上。因此,如果不调整代码,就无法更改元素 name 和 value 的顺序。 元素 variable 以及元素 name 的值为 H_YPE 也必须具有元素 value 或在 value 行下方任何位置找到的下一个元素 <name>H_YPE</name> 的值被错误地分配给环境变量Value 而不是使用默认值 1。 值 H_YPE 必须始终以这种拼写形式出现在 XML 文件中(所有字母均为大写)。 如果 XML 文件内容并不总是满足五个要求之一,则可以增强代码以执行更多 XML 结构检查。 根据 XML 规范,XML 标签区分大小写。因此,此代码运行时 FINDSTR 也区分大小写,尽管值 H_YPE 可以在任何情况下符合 XML 规范。出于同样的原因,比较字符串的 IF 条件也区分大小写,包括检查值 H_YPE 的 IF 条件。 要了解所使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完整、仔细地阅读每个命令显示的帮助页面。 echo /? endlocal /? findstr /? for /? goto /? if /? set /? setlocal /?

回答 1 投票 0

如何设置WMIC命令的输出值来检查笔记本电池作为批处理变量?

我想读出有关电池的详细信息如下: WMIC 路径 Win32_Battery 获取 EstimatedChargeRemaining 例如,我可以使用 %value% 变量显示其输出吗?

回答 1 投票 0

使用 FFmpeg 批量嵌入专辑封面

我想将文件夹中的所有 Flac 转换为 ALAC m4a 并嵌入专辑封面 使用这段代码,它将相同的 jpg 嵌入到每个 m4a 中,我怎样才能从每个 flac 中提取专辑封面,然后......

回答 1 投票 0

str_replace %%~na批处理文件中的文件名[关闭]

我想替换批处理文件中的当前文件名 对于 ("*.mp4") 中的 %%a 执行 ffmpeg -i "%%~a" -vf "drawtext=text=%%~na:fontfile='C\:\Users\harin\Desktop\test\F ...

回答 1 投票 0

如何根据文件名模式将文件移动到不同的文件夹?

我有以下代码,可将扩展名为 .tiff 或 .tif 的文件移动到目标文件夹。 移动 C:\Pics\*.tif D:old\images 移动 C:\Pics\*.tiff D:old\images 不过,我想...

回答 1 投票 0

如何随机化浏览器打开网页

我有这个 PowerShell 命令行,通常通过 Google Chrome 打开网页,但我希望使用 Chrome 和 Firefox 随机打开该网页。 启动进程-FilePath chrome.exe“www.quo...

回答 1 投票 0

如何让从文件中读取的百分比符号 (%) 在 Windows 批处理文件中展开?

这是文件path.txt: %APPDATA% oo 这是批处理文件 read-path.bat 的一部分: ... for /f %%i in (path.txt) 如果未定义 fooDir ( 如果存在 %%i ( 设置“fooDir=%%i” )...

回答 1 投票 0

如何将同名但后缀不同的文件打包成ZIP文件?

以下是一个文件的示例: C: 较旧的 ideo\my-holiday-video.mp4 C: old\image\my-holiday-screen.png C: old\mix\my-holiday-HDphoto.jpg C:旧的

回答 0 投票 0

用于检查和更改注册表值的批处理文件

我希望我的组织使用 Windows Server 2019 的默认“打印屏幕”。 我的意思是,当用户按下 PrtScn 按钮时,它将显示并使用默认的“截图工具”...

回答 1 投票 0

特定参数的垂直输出到水平输出

我有一个像下面这样的卷曲垂直输出,我想使用 shell 脚本或批处理脚本来获得水平输出以放入 csv 格式。是否有可能或者您可以分享一个命令来...

回答 4 投票 0

批处理文件检查输入的磁盘是否存在

我有一个关于检查输入的磁盘字母是否存在的问题。 我想显示可用磁盘列表,然后要求用户输入磁盘字母,检查该磁盘名称是否存在并执行一些命令

回答 3 投票 0

如何使用批处理文件从文件中的特定行读取特定字符?

我有一个数据文本文件,我想从特定行的特定位置提取几个值。 [0xA1 RR] I2C 起始位 写入:0xA1 确认 读取:0x61 读取:ACK 0xA8 不确认 I2C 停止位...

回答 2 投票 0

日志文件读取并查找值字符串

我有一个日志文件,其中包含以下几行。 测试总数:1。通过:0。失败:1。跳过:0。 测试执行时间:3.5167 分钟 测试总数:1。通过:0。失败:1。跳过...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.