在批处理文件中使用*?

时间:2017-11-16 21:31:51

标签: windows batch-file cmd

我有一个我从公共论坛获得的批处理文件,所以遗憾的是原作者不为我所知。批处理文件由Windows服务器上运行的程序调用。

代码的目的是复制.PDF文件,将它们移动到服务器上的不同文件夹位置,并在此过程中,根据数据库中的值动态重命名文件。

代码中声明的五个变量(%1%2%3%4%5)是传递给批处理文件的命令行参数。变量%1和%3基本上是“硬编码”值,而变量%2,%4和%5是可变的。

代码功能齐全,我已根据自己的需要对其进行了修改。但是,我不明白代码中的一个陈述,所以我希望有人能够对这种方式的功能或原因有所了解。

我不明白的是第23行中星号的用法:IF%2 == *

从功能上来说,我知道这段代码的最终结果是,如果%2变量中没有填充值,代码会将文件名前缀设置为空,否则会将前缀设置为任何值。变量。

我理解==比较运算符,我只是不确定在这个上下文中使用星号字符。我期待的是以下代码:IF%2 ==“”

我在Google上讨论了一段时间,寻找其他示例或可能的解释,但我找不到任何有用的东西。任何人都可以对此有所了解吗?提前谢谢!

以下是批处理文件的代码:

@ECHO off

REM Set global variables
SET OutputFolder=D:\Temp
SET Prefix=

REM %1 Destination sub-folder name 
REM %2 Prefix to add to file name (variable value, can be blank)
REM %3 File extension (set to pdf)
REM %4 Original output file location (full folder path on server)
REM %5 Original file name

ECHO %1 %2 %3 %4 %5 >> D:\Temp\CopyOutputLog.txt
cd %4

:FileExistTest
%~dp0\SLEEP.EXE 1
ECHO Does %5.%3 exist? ...
IF EXIST %4\%5.%3 (GOTO CopyFile) ELSE (GOTO FileExistTest)

:CopyFile
ECHO About to copy %5.%3 ...
IF %2==* (SET Prefix=) ELSE (SET PREFIX=%2)
COPY %4\%5.%3 "%OutputFolder%\%1\%Prefix%%5.%3"
GOTO end

:end

1 个答案:

答案 0 :(得分:0)

*对于文件名是reserved character,所以为了防止错误,如果有人将其传递给脚本 - 原作者将其丢弃。

不幸的是,有更多特殊符号,所以这段代码只是部分正确。