繁体   English   中英

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

[英]Filenames with . in batch file

我有一个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 (

有什么提示吗?

进一步解释为什么应该始终使用引号。

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

当您在不使用引号的情况下使用它时,会出现语法错误。

简化代码

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

只要%1用引号引起来, FOR /F本身就起作用,但是如果缺少引号,它就会失败。

但是SET var=%~dp1破坏了代码,因为在将FOR块解析为

set var=C:\Program and files (x86)\Tools&Help\bla.txt

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

for /f "usebackq" %%j in (%1) do (
        SET var=C:\Program and files (x86)

对于您的情况,您应该将代码修改为

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"
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM