找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 14659|回复: 13

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

[复制链接]
发表于 2024-10-19 15:17:45 | 显示全部楼层 |阅读模式
本帖最后由 cbbos 于 2024-10-19 23:31 编辑

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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-10-19 15:31:45 | 显示全部楼层
回复 1# cbbos
  1. echo FPP "%~1" -o "%~dp1MOD.bin"
  2. pause
复制代码
代码修改成上面这个样子,按照你的方法执行,截图发出来看看。

如果需要上传截图,可以找个图床,例如:
http://bbs.bathome.net/thread-60985-1-1.html
 楼主| 发表于 2024-10-19 15:53:52 | 显示全部楼层
回复 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都使用不了了。
发表于 2024-10-19 16:15:37 | 显示全部楼层
用vbs重新运行时没有带上参数??
发表于 2024-10-19 16:39:23 | 显示全部楼层
回复 3# cbbos

第9行代码改成如下一行试试...

  1. echo UAC.ShellExecute "%~f0", "%~1", "", "runas", 1 >> "%temp%\getadmin.vbs"
复制代码
 楼主| 发表于 2024-10-19 16:59:15 | 显示全部楼层
本帖最后由 cbbos 于 2024-10-19 17:01 编辑

回复 4# Five66
回复 5# aloha20200628


    这个是调用管理员的,使用绝对路径没问题。以前使用拖入文件也没问题,现在不知道怎么回事,所有使用%~1获取拖入文件路径的bat都使用不了了。
发表于 2024-10-19 17:32:21 | 显示全部楼层
按站长2楼的代码,执行,看看有什么问题
发表于 2024-10-19 18:29:31 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-10-19 20:21:32 | 显示全部楼层
回复 7# 77七


    3楼就是按站长的来的,还是获取不到
 楼主| 发表于 2024-10-19 20:25:07 | 显示全部楼层
本帖最后由 cbbos 于 2024-10-19 20:31 编辑

回复 8# aloha20200628


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

编辑:补上%~1后可以正确获取了,这是不是系统环境除了问题?之前没加上%~1也能正确获取路径。
发表于 2024-10-19 21:11:54 | 显示全部楼层
回复 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技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2024-10-19 21:17:26 | 显示全部楼层
回复 11# 77七
是在添加了 获取管理员权限的代码 之后


不是添加之后,这个代码一直用了的。不明白怎么就突然用不了了
发表于 2024-10-19 23:50:02 | 显示全部楼层
调用管理员的

未调用管理员的
是不同的
之前能用或许原本就是管理员??
 楼主| 发表于 2024-10-20 10:06:11 | 显示全部楼层
回复 13# Five66


    不清楚,我的每个bat基本都加了这个管理员代码,就是突然间全部失效了,只有使用绝对路径的还能用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:42 , Processed in 0.018886 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表