相关疑难解决方法(0)

批处理脚本:此时\MyProg 出乎意料

我有一个简单的批处理脚本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)

这悲剧!我该如何解决这个问题?

windows batch-file

2
推荐指数
1
解决办法
278
查看次数

在批处理cmd文件中使用set来更新变量值

批处理文件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

cmd batch-file set echo

2
推荐指数
1
解决办法
4393
查看次数

CMD bat为什么%% a在第一次循环后会丢失它的值?

为什么这个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)

cmd batch-file

1
推荐指数
1
解决办法
58
查看次数

赢得批次 - 拆分和连接

我有一个逗号分隔的字符串,格式如下:

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)

windows string cmd batch-file

0
推荐指数
1
解决办法
205
查看次数

如何在批处理文件中创建依赖于其他变量的变量,如%time%date%?

让我们说如果我必须打印时间和日期三次,我必须写

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%一次变量,并在它们发生变化时仍然回显实际的日期和时间.

cmd batch-file

0
推荐指数
1
解决办法
49
查看次数

如何在 FOR 循环中获取当前日期

我在 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 个多小时,似乎无法让它在 …

windows for-loop cmd batch-file

0
推荐指数
1
解决办法
105
查看次数

批处理文件错误,表示ECHO为OFF

我已经写了这个批处理文件代码,但是有这个错误,如果您回答我,我感谢您。

错误是,当我选择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)

batch-file

-2
推荐指数
1
解决办法
1万
查看次数

标签 统计

batch-file ×7

cmd ×5

windows ×3

echo ×1

for-loop ×1

set ×1

string ×1