文件名用。在批处理文件中

时间:2016-06-28 11:15:26

标签: windows batch-file cmd

我有一个曾经工作的Windows批处理文件,但由于我更换了笔记本电脑,它失败了。

我想这是由我的文件路径中的点(。)引起的,但我无法找到解决此问题的方法。

我基本上将文件名传递给我的批处理文件并让它处理它但是当它开始从文件中读取行时它会失败:

echo MBP File: %1
rem Check that the file is a MapBasic Project File
if /I "%~sx1" NEQ ".mbp" (
    echo Error: file %~dpnx1 is not a MapBasic Project File ^(^*.mbp^)
    goto :EOF
) else (
    echo file %1 is a MapBasic Project File ^(^*.mbp^)
)

echo Looping MBP
for /f "usebackq skip=1 delims== tokens=2" %%j in (%1) do (
    echo Checking input file from MBP
    echo j: %%j
    SET filemb=%~dp1%%j
    ....

输出如下:

file "D:\Dropbox (Some-Name)\3. MB_Kode\mbInfoSelHandler\mbcode\InfoSelHandler.mbp" is a MapBasic Project File (*.mbp)
Looping MBP
\3. was unexpected at this time.

正如您所看到的,最后一个回音文字是Looping MBP

该文件包含以下行:

[LINK]
Application=..\InfoSelHandler.mbx
Module=Library\ARRAYLib.mbo
Module=Library\CONFIGFILELib.mbo
Module=Library\DEBUGLib.mbo

我假设这一行存在问题,但我不确定:

for /f "usebackq skip=1 delims== tokens=2" %%j in (%1) do (

任何提示?

1 个答案:

答案 0 :(得分:3)

更多解释为什么你应该总是使用引号。

当路径包含括号或&符号时,您遇到麻烦,例如在 C:\Program and files (x86)\Tools&Help\bla.txt

当你使用它时,如果用引号括起来,你会得到语法错误。

简化代码

for /f "usebackq" %%j in (%1) do (
    SET var=%~dp1
)

FOR /F本身有效,只要%1被引号括起来,但当它们丢失时就会失败。

但是SET var=%~dp1打破了代码,因为当FOR块被解析为

时它被扩展了
set var=C:\Program and files (x86)\Tools&Help\bla.txt

x86)的右括号关闭FOR块,\Tools&Help\bla.txt在块之外,并产生语法错误。

    for /f "usebackq" %%j in (%1) do (
        SET var=C:\Program and files (x86)\Tools&Help\bla.txt
    )

在您的情况下,您应该将代码修改为

for /f "usebackq skip=1 delims== tokens=2" %%j in ("%~1") do (
    echo Checking input file from MBP
    echo j: %%j
    SET "filemb=%~dp1%%j"
)