[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 已解决-bat文件拖入功能失效

本帖最后由 cbbos 于 2024-10-19 23:31 编辑

比如这个代码前段时间还能识别拖入文件路径,现在突然识别不到了,输出Input file not found
  1. FPP "%~1" -o "%~dp1MOD.bin" > output.tmp
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 13# Five66


    不清楚,我的每个bat基本都加了这个管理员代码,就是突然间全部失效了,只有使用绝对路径的还能用

TOP

调用管理员的

未调用管理员的
是不同的
之前能用或许原本就是管理员??

TOP

回复 11# 77七
是在添加了 获取管理员权限的代码 之后


不是添加之后,这个代码一直用了的。不明白怎么就突然用不了了

TOP

回复 9# cbbos

所以你说的突然不能用了,是在添加了 获取管理员权限的代码 之后,那原因不是很明显吗?
获取管理员权限是用其它脚本启动批处理,其中如果没有接力传递参数,%~1是为空值的。
参考 WHY大佬的代码,改了一下
  1. @FLTMC>nul || PowerShell "Start-Process CMD -Args '/c', '\"\"%~f0\"', '\"%~1\"\"' -Verb RunAs" && exit /b
  2. @echo off
  3. cd /d "%~dp0"
  4. echo "%~1"
  5. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP

本帖最后由 cbbos 于 2024-10-19 20:31 编辑

回复 8# aloha20200628


    试了下,还真是这问题,不提权限就能正确获取到路径了。估计系统环境哪里出了问题,之前一直没问题

编辑:补上%~1后可以正确获取了,这是不是系统环境除了问题?之前没加上%~1也能正确获取路径。

TOP

回复 7# 77七


    3楼就是按站长的来的,还是获取不到

TOP

本帖最后由 aloha20200628 于 2024-10-19 18:35 编辑

回复 3# cbbos

用3楼的代码复盘一下整个流程》
   首次运行批处时虽然拖入了 "%~1",但因当前批处未被提权故循行了 '提权' 流程,代码跑到第11行即退出了
   退出前启动了用来‘提权’的vbs脚本
   但临时写出的vbs代码中遗失了原先的 "%~1",故用vbs脚本二次重启批处时就没有了 "%~1",因此第16行代码中的 "%~1" 就成了空值 "" ...
5楼代码就是为此打个补丁,在临时写出的vbs代码中补上 "%~1" 。

另言之》若 LENV.exe "%~1" -decrypt 无须提权也能正常运行,楼主可用以下代码验证一下 "%~1" 是否还是空值
  1. @echo off
  2. echo LENV.exe "%~1" -decrypt
  3. pause&exit/b
复制代码

TOP

按站长2楼的代码,执行,看看有什么问题
bat小白,请多指教!谢谢!

TOP

本帖最后由 cbbos 于 2024-10-19 17:01 编辑

回复 4# Five66
回复 5# aloha20200628


    这个是调用管理员的,使用绝对路径没问题。以前使用拖入文件也没问题,现在不知道怎么回事,所有使用%~1获取拖入文件路径的bat都使用不了了。

TOP

回复 3# cbbos

第9行代码改成如下一行试试...
  1. echo UAC.ShellExecute "%~f0", "%~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
复制代码

TOP

用vbs重新运行时没有带上参数??

TOP

回复 2# Batcher


    找了个简单的bat试了下
  1. @echo off
  2. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  3. if '%errorlevel%' NEQ '0' (
  4. echo Requesting administrative privileges...
  5. goto UACPrompt
  6. ) else ( goto gotAdmin )
  7. :UACPrompt
  8. echo Set UAC = CreateObject("Shell.Application") > "%temp%\getadmin.vbs"
  9. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  10. "%temp%\getadmin.vbs"
  11. exit /B
  12. :gotAdmin
  13. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  14. pushd "%CD%"
  15. CD /D "%~dp0"
  16. echo LENV.exe "%~1" -decrypt
  17. pause
复制代码
输出
LENV.exe "" -decrypt
请按任意键继续. . .



我发现,现在所有使用%~1获取拖入文件路径的bat都使用不了了。

TOP

回复 1# cbbos
  1. echo FPP "%~1" -o "%~dp1MOD.bin"
  2. pause
复制代码
代码修改成上面这个样子,按照你的方法执行,截图发出来看看。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表