【问题标题】:Using FOR loops to check file exist使用 FOR 循环检查文件是否存在
【发布时间】:2018-04-20 17:04:37
【问题描述】:

我正在尝试使用 FOR 循环来创建一个批处理来检查目录中是否存在文件。我正在努力处理文件名中有空格的文件,如果可能的话,我不想使用 .txt 列表。所以这是我迄今为止测试过的。

@echo OFF
:: Variables
set Folder=D:\Test Folder
set Space=File Name With Space.txt
set NoSpace=FileNameWithoutSpace.txt

:: For Loop

FOR %%A in (%Space% %nospace%) do (
if exist "%Folder%\%%A" (
        ECHO %%A exist
        ) else (
            ECHO %%A doesn't exist
            echo. )
)

这是重新打开回显时读取的内容。

(如果存在 "D:\Test Folder\File" (ECHO 文件存在) else (ECHO 文件 不存在回声。 ))

如果我使用这段代码:

@echo OFF    
:: Variables
set Folder=D:\Test Folder
set Space="File Name With Space.txt"
set NoSpace=FileNameWithoutSpace.txt

:: For Loop

FOR %%A in (%Space% %nospace%) do (

if exist "%Folder%\%%A" (
    ECHO %%A exist
    ) else (
        ECHO %%A doesn't exist
        echo. )
)

它将“IF”命令读作:

(如果存在 "D:\Test Folder\"File Name With Space.txt"" (ECHO "File Name With Space.txt" 存在) else (ECHO "File Name With Space.txt" 不存在回声。 ))

我做错了什么?

【问题讨论】:

标签: windows batch-file for-loop command-prompt


【解决方案1】:

Aaron,这是你应该使用的语法,(特别注意双引号的位置," 和元变量修饰符的使用,@987654322 @):

@Echo Off    
Rem Variables
Set "Folder=D:\Test Folder"
Set "Space=File Name With Space.txt"
Set "NoSpace=FileNameWithoutSpace.txt"

Rem For Loop
For %%A In ("%Space%" "%nospace%") Do (
    If Exist "%Folder%\%%~A" (
        Echo %%~A exists
    ) Else (
        Echo %%~A does not exist
        Echo=
    )
)
Pause

【讨论】:

  • 效果很好!回声返回带有双引号的结果。我该如何摆脱它。你能推荐阅读有关使用~的材料吗?我也想了解它是如何工作的。 "File Name With Space.txt" 存在是我得到的。
  • 我请你注意~元变量修饰符。查看在命令提示符下运行时For /? 的输出会显示%~I - expands %I removing any surrounding quotes (")。不过,我已经编辑了代码以匹配请求。
【解决方案2】:

你有

set Space=File Name With Space.txt

所以

FOR %%A in (%Space% %nospace%) do (

翻译成

FOR %%A in (File Name With Space.txt FileNameWithoutSpace.txt) do (

搜索以下文件:

File
Name
With
Space.txt
FileNameWithoutSpace.txt

引用你的论点:

FOR %%A in ("%Space%" "%nospace%") do (

【讨论】:

  • 我尝试了您的建议,它正确读取了“FOR”命令,但在“IF”命令中显示为:(如果存在“D:\Test Folder\"File Name With Space.txt" " (ECHO "File Name With Space.txt" 存在) else (ECHO "File Name With Space.txt" 不存在)。
  • if exist "D:\Test Folder\"File Name With Space.txt""...??我想,你没有理解引用的概念:if exist "D:\Test Folder\File Name With Space.txt" ...
猜你喜欢
  • 1970-01-01
  • 2021-01-10
  • 2020-08-09
  • 2017-10-17
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多