我正在寻找一种方法来编写一些批处理脚本,以便使用python作为自定义shell命令。
这是一个简单的例子:
FILENAME:gotofile.bat (将此批处理命令文件放在%PATH%可见的位置)
@setlocal enableextensions & "C:/Python27/python.exe" -x "%~f0" %* & goto :EOF
# Looks for a file on disk and take me there
import sys
import os
if len(sys.argv) == 2:
for root, dirnames, filenames in os.walk(os.getcwd()):
for filename in filenames:
if filename == sys.argv[1]:
print 'TAKING YOU TO: %s'%root
os.system('cls')
os.system('title %s'%root)
os.system('cd %s'%root)
quit()
现在从cmd shell类型 gotofile some_file_you_wish_to_find.ext (选择一个不太远的文件,否则os.walk
需要一段时间)
假设它存在,Python应该找到你的文件,打印它想带你去的地方,cls os.system调用将正确地清除你的屏幕,但另外两个os.system
调用什么都不做。< / p>
有没有办法让这项工作?或者我是否必须批量生产这些?
答案 0 :(得分:2)
是的,如果显示更改,您可以通过将一些&
重新放入来缩短批处理文件部分。
@echo off
rem = """
setlocal enableextensions
set PYTHON="C:/Python27/python.exe"
%PYTHON% -x "%~f0" %*
goto endofPython """
# Your python code goes here ..
if __name__ == "__main__":
# Looks for a file on disk and take me there
import sys
import os
if len(sys.argv) == 2:
for root, dirnames, filenames in os.walk(os.getcwd()):
for filename in filenames:
if filename == sys.argv[1]:
print 'TAKING YOU TO: %s' % root
command = '&'.join(['cls',
'title %s' % root,
'cd %s' % root,
'cmd /k'])
os.system(command)
rem = """
:endofPython """
注意:如果安装了Python,您应该只能使用python -x "%~f0" %*
而不是硬编码python.exe
的完整路径。
答案 1 :(得分:1)
没有
for /f "delims==" %%i in ('dir "%SystemDrive%" /s /b^|find "%~1" /i') do (echo TAKING YOU TO: %%i&timeout /nobreak 1 >nul&cls&title %%~dpi&cd /d "%%~dpi")
这应该做你想要的。