我有一个简单的批处理脚本test.bat,它通过命令行参数进行迭代:
@echo off
set prefix=C:\Program Files\MyProg
for %%x in (%*) do (
echo %prefix%
)
Run Code Online (Sandbox Code Playgroud)
这个版本的脚本在 cmd.exe 中没有问题:
C:\>test a b
C:\Program Files\MyProg
C:\Program Files\MyProg
Run Code Online (Sandbox Code Playgroud)
但是,如果我修改批处理文件以具有不同的prefix值,则添加(x86):
set prefix=C:\Program Files (x86)\MyProg
Run Code Online (Sandbox Code Playgroud)
脚本失败:
C:\>test a b
\MyProg was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
这悲剧!我该如何解决这个问题?
批处理文件Test.cmd:
@set args=args1
@set value=value1
@if defined value (
@echo args: [%args%], value: [%value%]
@set args=%args% /value=%value%
@echo args: [%args%]
)
@echo args: [%args%]
Run Code Online (Sandbox Code Playgroud)
命令输出>.\Test.cmd:
args: [args1], value: [value1]
args: [args1]
args: [args1 /value=value1]
Run Code Online (Sandbox Code Playgroud)
为什么我的每次调用都会@echo args: [%args%]返回不同的值?(一种没有更新的参数值,args1,一种具有更新,args1 /value=value1)
为什么这个bat文件忘记了%% a after:theFound?我试图理解For/f是如何工作的,但是在%thefound之后忘记了%% a
谢谢你的期待.
FOR /F %%a in (c:\temp\computers.txt) do (
echo %%a
set comPort=0
:comLoop
set /a comPort=%comPort%+1
reg query \\%%a\HKEY_LOCAL_MACHINE\SOFTWARE\Pergamon\AKT\Dienst\XFS\PASION_CM24_COM%comPort%
if errorlevel 0 goto theFound
if %comPort% LSS 10 goto comLoop
echo No CRU found >>c:\temp\output1.txt
:theFound
reg query \\%%a\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOSA/XFS_ROOT\SERVICE_PROVIDERS\PASION_CM24_COM%comPort%\Firmware>>c:\temp\output1.txt
)
Run Code Online (Sandbox Code Playgroud) 我有一个逗号分隔的字符串,格式如下:
host1.mydomain.net,host2.mydomain.net,host3.mydomain.net
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用批处理(不允许安装其他软件或使用 powershell)在每个主机名前加上“http://”和“:8080”,然后将它们串在一起。
http://host1.mydomain.net:8080,http://host2.mydomain.net:8080,http://host3.mydomain.net:8080
Run Code Online (Sandbox Code Playgroud)
下面只是我尝试过的一种方法,拆分字符串然后创建一个新的,但是虽然我能够提取每个主机名,但我似乎无法连接它们。还考虑将“http...”添加到字符串的开头,将“:8080”添加到末尾,并将每个逗号替换为“:8080,http://”,但我无法使添加工作. 如果这是 Linux 和 sed,它会非常简单,但是批处理操作对我来说一直很困难。
@echo off
set themes=Host1,Host2,Host3
set NEWSTR1=
echo list = "%themes%"
for %%a in ("%themes:,=" "%") do (
echo hostname is %%~a
if NOT DEFINED NEWSTR1 (
set NEWSTR1=remote://%%~a:4447
echo.%NEWSTR1%
) ELSE (
set NEWSTR1=%NEWSTR1%,remote://"%%a":4447
echo In the else %NEWSTR1% )
)
echo %NEWSTR1%
Run Code Online (Sandbox Code Playgroud) 让我们说如果我必须打印时间和日期三次,我必须写
echo %date% %time%
echo %date% %time%
echo %date% %time%
Run Code Online (Sandbox Code Playgroud)
上面的代码打印了三个不同的时间,如果我将%date %% time%指定给一个变量(为了避免每次都写入它们),那么它打印常数值三次,
set a=%date%_%time%
echo %a%
echo %a%
echo %a%
Run Code Online (Sandbox Code Playgroud)
但是我想创建%a%一次变量,并在它们发生变化时仍然回显实际的日期和时间.
我在 C:\myscript.bat 中有以下代码示例
for /f %%i in ('dir "C:\files" /b /a-d /o-d') do (
if /i "%%~xi"==".vib" (
gsutil cp c:\files\%%i gs://mybucket
call :GetDate
echo %dt% File %%i was uploaded )
)
:done
:GetDate
set X=
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x
set DATE.YEAR=%X:~0,4%&set DATE.MONTH=%X:~4,2%&set DATE.DAY=%X:~6,2%&set DATE.HOUR=%X:~8,2%&set DATE.MINUTE=%X:~10,2%&set DATE.SECOND=%X:~12,2%
set dt=%DATE.MONTH%-%DATE.DAY%-%DATE.YEAR%_%DATE.HOUR%-%DATE.MINUTE%-%DATE.SECOND%
exit /b
Run Code Online (Sandbox Code Playgroud)
我的问题是在 FOR 循环内调用 GetDT 时在“echo %dt% File %%i was updated”中获取当前日期。只要我在 FOR 循环之外调用 :GetDate ,它就可以正常工作。我已经花了大约 4 个多小时,似乎无法让它在 …
我已经写了这个批处理文件代码,但是有这个错误,如果您回答我,我感谢您。
错误是,当我选择2时,它问我要进入期望的站点,但是当我写地址时却出现错误,说ECHO IS OFF
帮助我该怎么做...
@echo off
title trace
:main
echo 1)TRACE GOOGLE
echo 2)TRACE YOUR SITE
set /p choice= Enter your choice:
echo %choice%
if %choice%==1 (
tracert www.google.com
goto main
pause >nul
)
if %choice%==2 (
set /p s=Enter your desired site:
echo %s%
pause >nul
)
pause >nul
Run Code Online (Sandbox Code Playgroud)