目前,我有一个循环遍历项目列表并将它们复制到目录(存档)。但是,列表中的一项(路径名中有一个全局变量)被“字面”解释(作为文本而不是代码)。我知道通常你可以通过 (^^) 转义该行,将其解释为代码而不是文本,但显然我在这里做错了什么,因为它不起作用......
my.list 中存在问题的项目(其中包含转义符)是:
location\foo^^%date:~0,3%*.zip
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码是...
for /f "delims=" %%a in (my.list) do (
echo "%%a"
)
Run Code Online (Sandbox Code Playgroud)
回声的
"location\foo^^%date:~0,3%*.zip"
Run Code Online (Sandbox Code Playgroud)
代替
location\fooMON*.zip
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
%errorlevel% 在 WindowsXP 中不起作用。
据我所知,当发生错误时,%errorlevel% 设置为 1 或更高的值,如果没有错误,它将设置为 0。
但是,即使没有错误,%errorlevel% 也是 1。我设置 %errorlevel% 0,即使有错误 %errorlevel% 也是 0。
我认为操作系统不会改变 XP 中的 %errorlevel%。
在 Win7 中它完全可以工作。
@echo off
setlocal enabledelayedexpansion
call dir
echo errorlevel=%errorlevel%
REM expected errorlevel=0 but 1
call dor
echo errorlevel=%errorlevel%
REM expected errorlevel=1
set errorlevel=0
call dor
echo errorlevel=%errorlevel%
REM expected errorlevel=1 but 0
Run Code Online (Sandbox Code Playgroud)
但是如果 errorlevel 1() 看起来有效。
我需要从字符串中提取Major,Minor和Revision数字并实现这一点我试图使用'.'在批处理文件中拆分字符串.字符作为分隔符.
例如:如果用户在命令提示符下输入1.0.2,我应该能够提取
我正在尝试使用FOR命令来实现这一点,但只是没有通过.任何人都可以帮助我解决部分
@ECHO OFF & SETLOCAL
set /p "ReleaseVersion=Please specify the software release version : "
:nextVar
for /F "tokens=1* delims=." %%a in ("%ReleaseVersion%") do (
set %%a
set ReleaseVersion=%%b
)
if defined ReleaseVersion goto nextVar
@PAUSE
Run Code Online (Sandbox Code Playgroud) 我正在尝试以 JSON 格式格式化命令的输出:
echo "patches" : {
set patches="wmic qfe get HotfixID"
for /f "skip=1" %%i in (' %patches% ') do (
set /a count=count+1
call echo "!count!" : "%%i",
)
echo }
Run Code Online (Sandbox Code Playgroud)
一切都很好,直到我到达补丁列表的末尾,它读取最后一个补丁之后的行,然后打印"".
我怎样才能让它在应该停止的时候停止?
如果可能,我想避免使用文本文件。
我看到一些批处理脚本以这种方式工作,包括所有的stackoverflow.
我的问题很简单:为什么MEM部分不起作用?
@echo OFF
SET CPU="$CPU"
echo CPU: %NUMBER_OF_PROCESSORS%
FOR /F "delims=" %%i IN ('wmic computersystem get TotalPhysicalMemory') DO set MEM=%%i
echo MEM: %MEM%
Run Code Online (Sandbox Code Playgroud) 这是代码:
call n:\xxx\xxx\variables.bat %1 %2 %3 %4 %5 %6
set yourZipPassword=%xxx%
set yourFolderPath="n:\xxxx\xxxx\%xxxx%"
for /R "%yourFolderPath%" %%I in ("*.zip") do (
"C:\Program Files\7-Zip\7z.exe" x -p%yourZipPassword% -y -o"%%~dpI" "%%~fI"
)
Run Code Online (Sandbox Code Playgroud)
不知道如何处理这个错误 - “ R 此时出乎意料。 ”
这个bat文件停留在这一行并且不再处理:
for /R "%yourFolderPath%" %%I in ("*.zip") do (
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建批处理文件脚本以将普通.txt文档转换为完全垂直的文档.例如:
从:
This is a test document,
it is displaying characters on the same line.
Run Code Online (Sandbox Code Playgroud)
至:
T
h
i
s
i
s
a
t
e
s
t
d
o
c
u
m
e
n
t
,
i
t
i
s
d
i
s
p
l
a
y
i
n
g
c
h
a
r
c
t
e
r
s
o
n
t
h
e
s
a
m
e
l
i
n
e
.
Run Code Online (Sandbox Code Playgroud) 我试图找到一个文件的存在,然后在命令提示符下打印出如下目录:
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo C:\Program Files(x86)\Microsoft Visual Studio 14.0\)
Run Code Online (Sandbox Code Playgroud)
这失败并出现以下错误:
\Microsoft was unexpected at this time.
Run Code Online (Sandbox Code Playgroud)
如果我重写我的命令
C:\> if exist "C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" (echo "C:\Program Files(x86)\Microsoft Visual Studio 14.0\")
Run Code Online (Sandbox Code Playgroud)
这打印:
"C:\Program Files(x86)\Microsoft Visual Studio 14.0\"
Run Code Online (Sandbox Code Playgroud)
我使用了这个命令的输出,并且它周围的引号引起了一些问题.有什么办法可以在不添加引号的情况下回应这个问题吗?
我一直在尝试解析格式为“xxxx[Delimiter]xxxx[Delimiter]xxxx”的mac,其中“x”在[0-9,AF,af]中,“[Delimiter]”在[:,.,- ]。我已尝试以下代码,并引用标题为Regex 的示例来匹配批处理脚本中的变量以及什么是 MAC 地址的正则表达式?。
set MACAddr=012a.23fa.5ffc
If [%MACAddr%] EQU [] (
echo MAC Address is not set. Please set it to proceed.
) else (
echo %MACAddr%|findstr /r "^([0-9A-Fa-f]{2}[:.-]?){5}([0-9A-Fa-f]{2})$"
if errorlevel 1 (echo Mac %MACAddr% is not of same Format as xxxx.xxxx.xxxx) else ( pause )
)
Run Code Online (Sandbox Code Playgroud)
也尝试过这个
echo %MACAddr%|findstr /r "^([0-9A-Fa-f]{4})([:.-])([0-9A-Fa-f]{4})([:.-])([0-9A-Fa-f]{4})$"
Run Code Online (Sandbox Code Playgroud)
但它只能运行if errorlevel 1 (echo Mac %MACAddr% is not of same Format as xxxx.xxxx.xxxx)。请告诉我我做错了什么。
我正在尝试创建一个for循环,它将通过一个目录并对该目录中的所有文件运行ffmpeg命令.我的问题是,某些文件!的名称在使用延迟扩展时会导致问题.我研究了很多解决方案,但没有一个能让我到任何地方.目前我可以用!包含的方式回显文件名,但我似乎无法通过!my for循环传递文件名,因为延迟扩展有效地删除了!.
这是我的批处理脚本:
@echo off
setlocal enabledelayedexpansion
for %%f in ("Y:\Samples\Test Videos\*.mkv") do (
set "filename=%%~nxf"
ffmpeg -i "%%f" -vcodec copy -acodec copy -scodec copy -vbsf h264_changesps=level=40 -vbsf h264_changesps=fps=24000:1001 "E:\Converted\!filename!"
)
pause
Run Code Online (Sandbox Code Playgroud)
这适用于没有!名称的所有文件.如果我使用这样的批处理脚本:
@echo off
for %%f in ("Y:\Samples\Test Videos\*.mkv") do (
call :command "%%f"
)
pause
:command
set "fname=%~nx1"
set "fpath=%~dpnx1"
echo %fname%
ffmpeg -i %fpath% -vcodec copy -acodec copy -scodec copy -vbsf h264_changesps=level=40 -vbsf h264_changesps=fps=24000:1001 "E:\Converted\%fname%"
Run Code Online (Sandbox Code Playgroud)
然后我可以使用! …
batch-file ×10
cmd ×8
windows ×4
escaping ×2
for-loop ×2
command-line ×1
errorlevel ×1
findstr ×1
output ×1
quotes ×1
scripting ×1
text ×1
wmic ×1