文件名。 在batch file中

我有一个Windowsbatch file,曾经工作,但因为我改变了笔记本电脑,它失败了。

我想这是由我的文件path中的点(。)引起的,但是我一直无法find解决此问题的方法。

我基本上通过一个文件名称到我的batch file,让它处理它,但它开始从文件中读取行时失败:

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. 

正如你可以看到最后一个echo'ed文本是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 ( 

任何提示?

Solutions Collecting From Web of "文件名。 在batch file中"

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

当一个路径包含括号或&符号时,你就陷入了困境
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和文件(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" )