尝试有条件地更改Windows批处理脚本中的文件路径

时间:2014-02-19 10:54:51

标签: windows batch-file

我有一个简单的脚本,可以在Notepad ++中启动XML文件路径

不幸的是,某些文件的生成文件路径不正确,我正在尝试在脚本中对其进行补偿(理想的修复方法显然是解决了路径问题,但目前这不是一个选项)。 / p>

这就是我所拥有的,为代码道歉,我对批处理脚本很新...

set /p filePath= Enter file path: 
 if "%filePath%" == "1" goto xmlMenu
 else if "%filePath%" == "file://path/of/file/*/*/*/*/A/*.XML" 
 set filePath="file://path/of/file/*/*/*/*/B/*.XML"
goto openXML

我希望filePath变量继承用户输入的其余路径,但目前它使用通配符显式设置路径。我已经说明条件的方式似乎也存在问题,因为无论else条件如何,它似乎都将路径设置为/B/*.XML。

1 个答案:

答案 0 :(得分:0)

有很多错误,但正如你所说,你是新的。

首先,如果您输入的文件路径为“1”,那么您应该安全抵达xmlmenu。

下一行会产生错误,因为使用了else子句

  • if-true指令必须是(带括号的)
  • (必须与if
  • 位于同一物理行
  • 序列) else (必须全部位于同一物理行(不一定与if相同)

无论如何,else是多余的。如果条件不为真,则不会发生跳转,因此将执行下一个语句行。

if ... == ...如果左侧的字符串与右侧的sring相同,则为true,因此您需要输入的字符串与{{1}完全相同} file://path/of/file/*/*/*/*/A/*.XML为真。 action-statment也必须与if位于同一物理行上,因此这是语法错误的第二个来源。

然后执行if,将该着名字符串(引号)分配给变量set。然后我们去了filepath

请注意openxml是Windows中的路径分隔符; \是一个开关说明符。

现在 - 如果您要解释您想要做什么 - 也许输入一个文件名,该文件名可能位于目录结构中的某个位置,如果找到了,则将 what?分配给变量filepath。一两个例子是个好主意。


这应该有一个可用的系统。数字检查不完整,但足够了。对于决心打破它的用户,我没有防弹......

/

显然,更改路径前缀以适应。

对于@ECHO OFF SETLOCAL :again SET "filepath=" set /p filePath="Please enter filepath as yyyymmdd : " IF NOT DEFINED filepath GOTO :EOF if "%filePath%" == "1" goto xmlMenu :: test to see whether entered data is numeric SET /a "filepath=%filepath%" 2>nul IF %filepath%==0 echo invalid entry - numerics only, please&GOTO again IF %filepath% lss 19800100 GOTO badymd IF %filepath% gtr 20991231 GOTO badymd SET filepath=\path\prefix\%filepath:~0,4%\%filepath:~4,2%\%filepath:~6,2% :: This is just to show the filepath constructed ECHO filepath is "%filepath%" IF NOT exist "%filepath%\A\*.xml" ECHO "%filepath%\A\*.xml" does NOT exist&GOTO again IF NOT exist "%filepath%\B\*.xml" ECHO "%filepath%\B\*.xml" does NOT exist&GOTO again SET "filepath=%filepath%\B\*.xml" goto openXML :badymd ECHO invalid entry - 4 digits FOR year, 2 FOR month an 2 FOR day, please GOTO again :xmlmenu ECHO AT xmlmenu&GOTO :eof :openxml ECHO AT openxml with filepath="%filepath%"&GOTO :eof GOTO :EOF 的输入,将构建路径20140220。然后检查并....\2014\02\20 - 我只能假设两者都必须存在才能继续this +\B\*.xml