如何从第一个输入参数访问文件夹路径以及如何在批处理文件中调用IF Loop?


0
@Echo OFF

SET FilePath=%1

SET HeaderFilePath=%2

SET RetrunCode="0"

Call :sub %FilePath% exit /b

:sub SET FileName=%~n1


SET FilePath=%1

SET "FileType=.zip"

CALL SET "ZipType=%%FilePath:%FileType%=%%"

if "%Ext%"==".zip" (goto Function1) else Goto Function2

:Function1
 Echo  File is zipped

:Function2 
Echo File is not zipped

pause

**我在test.bat上面放置了代码并传递了下面提到的参数

C:\ Users \ ak813708> C:\ Users \ abhay \ Desktop \ test1.bat
C:\ Users \ abhay \ Desktop \ doc1.zip C:\ Users \ abhay \ Desktop \ header.txt但无论其第一个参数文件如何输入其调用函数2. **


2
“如果我通过E:\ testing \ appserver_output.dat然后它应该调用Function2,如果我通过E:\ testing \ appserver_output.zip,它应该只调用函数1” - 所以基本上你只想在基础上进行分支延期?
Karan 2015年

您可以使用%~x1- 扩展%1到文件eXtension
DavidPostill

@Karan:是的。但在上面的代码我试图基于If调用功能但它不起作用。
abhayk 2015年

@DavidPostill:谢谢..现在它的完整证据和以前我想要在FilePath中找到子串“.zip”更容易
abhayk 2015年

这就是我问你的问题。如果这是一个根据扩展分支的简单情况,for /?会告诉你%~xI的作用。
Karan 2015年

Answers:


1

所以,我鼓励你使用%~dp操作员,而不仅仅是%~p操作员。有关文件操作符的完整列表以及如何使用它们,请FOR /?在命令行中使用 - 它位于该部分的最后。

类似下面的内容应该为您提供更可预测的代码,这为您接受命令行文件名提供了一点灵活性。

@Echo OFF
SET File=%1
SET HeaderFilePath=%2
SET RetrunCode="0"
Call :sub %File%
exit /b

:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
pause

if "%Ext%"==".zip" (goto Function1) else Goto Function2

如果我通过E:\ abhay \ test \ output1.dat然后给它\ abhay \ test \而不是E:\ abhay \ test ..
abhayk 2015年

1
所以在我的回答中做出改变产生的输出没有变化?
ice13berg 2015年

ice13berg:它现在正在工作......谢谢....但仍然IF循环给出错误
abhayk 2015年

@abhayk请编辑您的问题以包含您正在使用的最新代码以及if您现在正在获得的错误...
DavidPostill

@DavidPostill:我已经更新了我的代码。但每次它的调用只有功能2
abhayk 2015年

1

如何获取文件扩展名给出命令行参数?

您可以使用以下方式获取文件扩展名

%~x1- %1仅扩展到文件扩展名。

所以你可以使用类似的东西:

SET Extension=%~x1

...

If "%ZipType%"=="%Extension%" (goto Function1) else Goto Function2

进一步阅读


0
@Echo OFF
SET File=%1
SET HeaderFilePath=%2
Call :sub %File%
exit /b
:sub 
SET FileName=%~n1
SET Ext=%~x1
SET PGPProcessPath=%~dp1
SET EncryptFile=%~fnx1
SET DecryptFile=%EncryptFile:_pgp=%
Echo extn is %Ext%
if "%Ext%"==".zip" (goto Function1) else Goto Function2
:Function1
echo this is function 1
goto :eof
:Function2
echo this is function2
goto :eof
:eof
Echo Process is completed
pause

我修改了我的批处理是这样的......现在远程服务器以及本地桌面路径都得到了处理,IF语句也正常运行


我想我最初就路径和IF声明回答了你的问题。您的脚本可能正在运行这两个函数,而不是JUST函数2,因为当处理'.zip'文件时,函数1被调用,但没有提交返回代码(并且脚本没有退出),所以它继续运行函数你goto :eof解决了,这个。一个更好的解决方案是return代码,因为你调用函数(call : sub,然后立即EXIT /b
ice13berg 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.