Batch file 如何批量制作切换开关?
我需要一个批处理文件,将在运行两个命令行之间切换 一人Batch file 如何批量制作切换开关?,batch-file,switch-statement,toggle,nircmd,Batch File,Switch Statement,Toggle,Nircmd,我需要一个批处理文件,将在运行两个命令行之间切换 一人 nircmd.exe setdefaultsounddevice "Speakers" 另一个存在 nircmd.exe setdefaultsounddevice "Headset" 我试着用一个.txt文件的存在作为标志,但出于某种原因,它总是认为它不存在。如何使批处理文件在每次运行时(以静默方式)滴答作响? 无论您如何命名下一批,它都将在同一位置创建一个同名的Ini文件(最初设置为Speakers) 它使用nircmdsinise
nircmd.exe setdefaultsounddevice "Speakers"
另一个存在
nircmd.exe setdefaultsounddevice "Headset"
我试着用一个.txt文件的存在作为标志,但出于某种原因,它总是认为它不存在。如何使批处理文件在每次运行时(以静默方式)滴答作响?- 无论您如何命名下一批,它都将在同一位置创建一个同名的Ini文件(最初设置为Speakers)
- 它使用nircmds
进行此操作,并将inisetval
键更改为当前选择Active
有时,如果有人发现任务有问题,你是幸运的。
- 无论您如何命名下一批,它都将在同一位置创建一个同名的Ini文件(最初设置为Speakers)
- 它使用nircmds
进行此操作,并将inisetval
键更改为当前选择Active
有时,如果有人发现任务正在进行测试,您是幸运的。一个好的解决方案是将开关存储在bat本身的
ADS
(可选数据流)中(仅当您的文件系统是NTFS
时才起作用):
您只需在第一次运行时收到文件未找到
警告,同时它可以找到广告
流,但之后将创建该流
@echo off
set "$activ="
set /p $activ=<%~nx0:activ
if not defined $activ (
echo speaker>%~nx0:activ
set "$activ=speaker"
)
echo actual [%$activ%]
if /i "%$activ%"=="speaker" (
nircmd.exe setdefaultsounddevice "Headset"
echo headset>%~nx0:activ
) else (
nircmd.exe setdefaultsounddevice "Speakers"
echo speaker>%~nx0:activ
)
非常简单,不需要任何临时文件,也没有呼叫限制一个好的解决方案是将交换机存储在bat本身的
ADS
(可选数据流)中(仅当文件系统为NTFS
时才起作用):
您只需在第一次运行时收到文件未找到
警告,同时它可以找到广告
流,但之后将创建该流
@echo off
set "$activ="
set /p $activ=<%~nx0:activ
if not defined $activ (
echo speaker>%~nx0:activ
set "$activ=speaker"
)
echo actual [%$activ%]
if /i "%$activ%"=="speaker" (
nircmd.exe setdefaultsounddevice "Headset"
echo headset>%~nx0:activ
) else (
nircmd.exe setdefaultsounddevice "Speakers"
echo speaker>%~nx0:activ
)
非常简单,不需要任何临时文件,也没有调用限制您可以以非常简单的方式将切换值存储在批处理文件本身中:
@echo off
setlocal
rem Get current value and update it
call :GetToggle
set /P "=+1" < nul >> "%~F0"
set /A "toggle%%=2"
if %toggle% equ 0 (
echo Set "Speakers"
) else (
echo Set "Headset"
)
goto :EOF
:GetToggle
rem Be sure that next line does NOT end in CR+LF:
set /A toggle=0
@echo关闭
setlocal
rem获取当前值并更新它
呼叫:GetToggle
设置/P“=+1”“%~F0”
设置/A“切换%%=2”
如果%切换%equ 0(
回声集“扬声器”
)否则(
回声设置“耳机”
)
后藤:EOF
:GetToggle
rem确保下一行不以CR+LF结尾:
设置/A切换=0
此方法正确工作的次数略少于4096次。如果批处理文件每天运行一次,则覆盖时间超过11年!如果这还不够,只需在获取切换值后添加一个If
命令,检查其是否超过4090,在这种情况下,在文件末尾插入一个中断的CR+LF字符,然后再插入一行set/a toggle=0
请注意,此方法还允许了解批处理文件的使用次数,因此它可能用于其他场景…您可以用一种非常简单的方式将切换值存储在批处理文件本身中:
@echo off
setlocal
rem Get current value and update it
call :GetToggle
set /P "=+1" < nul >> "%~F0"
set /A "toggle%%=2"
if %toggle% equ 0 (
echo Set "Speakers"
) else (
echo Set "Headset"
)
goto :EOF
:GetToggle
rem Be sure that next line does NOT end in CR+LF:
set /A toggle=0
@echo关闭
setlocal
rem获取当前值并更新它
呼叫:GetToggle
设置/P“=+1”“%~F0”
设置/A“切换%%=2”
如果%切换%equ 0(
回声集“扬声器”
)否则(
回声设置“耳机”
)
后藤:EOF
:GetToggle
rem确保下一行不以CR+LF结尾:
设置/A切换=0
此方法正确工作的次数略少于4096次。如果批处理文件每天运行一次,则覆盖时间超过11年!如果这还不够,只需在获取切换值后添加一个If
命令,检查其是否超过4090,在这种情况下,在文件末尾插入一个中断的CR+LF字符,然后再插入一行set/a toggle=0
请注意,此方法还允许知道批处理文件被使用了多少次,因此可以在其他场景中使用它…以包含您尝试的代码,它使用
.txt
文件的存在作为标志,但始终将其视为不存在。如果我们看不到您的失败代码,我们将无法帮助您处理它,不发布它意味着您希望有人为您编写脚本(这既粗鲁又离题)。包含您尝试的代码,它使用.txt
文件的存在作为标志,但始终将其视为不存在。如果我们看不到您的失败代码,我们将无法帮助您处理它,而不发布它意味着您希望有人为您编写脚本(这既粗鲁又离题)。我刚想建议在第一次运行时使用if exist
,但不幸的是,我发现这对ADSs不起作用。但是您可以做的是:2>nul(set/P$activ=<“%~nx0:activ”)| set“$activ=speaker”
。不管怎样,这是一个不错的方法!谢谢@aschipfl!更好更干净!也用你的解决方案编辑!这很有效,但只有效一次。你知道为什么吗?我刚想建议在第一次运行时使用if exist
,但不幸的是,我发现这对ADSs不起作用。但是您可以做的是:2>nul(set/P$activ=<“%~nx0:activ”)| set“$activ=speaker”
。不管怎样,这是一个不错的方法!谢谢@aschipfl!更好更干净!也用你的解决方案编辑!这很有效,但只有效一次。你知道为什么吗?如果这段代码不包含“nircmd.exe setdefaultsounddevice”命令,它将如何工作?@KalamalkaKid:这段代码解决了最初的问题,即“如何批量制作切换开关?”。您需要在正确的位置插入相应的nircmd.exe setdefaultsounddevice
命令。。。提示:nircmd.exe setdefaultsounddevice“Speakers”
命令位于显示Set“Speakers”
的行中,而nircmd.exe setdefaultsounddevice“Headset”命令位于显示Set“Headset”的行中
如果您只需编辑答案以包含信息,这将非常有用,这样像我这样不太懂编码的人就可以简单地更改设备的名称。我还是不知道该把这些线放在哪里。谢谢nircmd.exe setdefaultsounddevice“扬声器”在echo set之后还是之前?请帮忙,好吗