CMD创建文本文件遭拒绝访问及if exist判断异常问题咨询
嘿,我来帮你拆解这个问题——你现在碰到的是文件判断异常、权限拒绝还有脚本逻辑小错误的组合问题,咱们一步步来解决:
一、先修正脚本里的明显逻辑错误
你在createproc标签里的数值计算写错了!批处理里直接拼接字符串不会自动计算数值,这会导致创建的文件夹名称错误,进而让后续的if exist判断完全失效:
原错误代码:
for /f "delims=" %%b in ("setupcj.txt") do set stp=%%b+1
修改为(用set /a实现数值计算):
for /f "delims=" %%b in ("setupcj.txt") do set /a stp=%%b+1
这样才能正确把setupcj.txt里的数字加1,得到合法的数字文件夹名称,而不是像0+1这种奇怪的字符串名称。
二、解决if exist判断异常的问题
你遇到的判断不符合实际情况,大概率是当前目录不对或者文件属性导致的CMD缓存问题:
- 强制切换到脚本所在目录:在脚本最开头加上
pushd "%~dp0",确保所有操作都在脚本所在的文件夹下执行——双击脚本时,CMD的当前目录可能默认是系统目录(比如C:\Windows\System32),这会导致你找不到自己创建的文件:
@echo off pushd "%~dp0" REM 切换到脚本所在的绝对目录 title Folder Safe color e8
- 验证文件真实状态:可以在判断前加一行
dir /a "infocj.txt",/a参数会显示所有属性的文件(包括隐藏、系统属性),帮你确认文件到底存不存在:
dir /a "infocj.txt" if exist "infocj.txt" goto start goto MAKESOURCE
三、解决"Access is denied"权限问题
即使是管理员,也会遇到这类问题,常见原因和解决方法:
- 不要把脚本放在系统目录:比如
C:\Windows、C:\Program Files这些目录有严格的UAC保护,建议把脚本移到用户目录(比如桌面、C:\Users\你的用户名\Documents)或者自定义的非系统文件夹; - 改用更可靠的文件创建方式:
break>命令在某些环境下有兼容性问题,换成type nul>"文件名"创建空文件更稳定:
REM 替换 break>"infocj.txt" type nul>"infocj.txt"
- 检查文件夹NTFS权限:右键脚本所在文件夹→属性→安全→高级,确认你的管理员账户拥有「完全控制」权限,没有的话点击「编辑」添加权限;
- 关闭锁定文件的程序:杀毒软件、云同步工具(OneDrive、百度云)会实时扫描/锁定文件,暂时禁用实时防护或暂停同步,再测试脚本;
- 确保属性修改命令执行成功:在修改属性后检查错误码,避免因为属性没修改成功导致后续操作失败:
attrib -s -h -r "infocj.txt" if errorlevel 1 ( echo 无法修改infocj.txt属性,权限不足! pause exit /b 1 )
四、整合修复后的关键代码片段
把上述修复点整合后,MAKESOURCE和createproc标签的代码如下:
:MAKESOURCE rem 改用可靠的空文件创建方式,并检查错误 type nul>"infocj.txt" if errorlevel 1 ( echo 创建infocj.txt失败,请检查文件夹权限! pause exit /b 1 ) attrib +s +h +r "infocj.txt" type nul>"setupcj.txt" >> "setupcj.txt" echo 0 attrib +s +h +r "setupcj.txt" goto START :createproc rem 修复数值计算逻辑 for /f "delims=" %%b in ("setupcj.txt") do set /a stp=%%b+1 rem 先解锁文件属性,再操作 attrib -s -h -r "infocj.txt" if errorlevel 1 ( echo 无法解锁infocj.txt属性! pause exit /b 1 ) for /f "tokens=* usebackq" %%a in ("infocj.txt") do set inf=%%a set inf=%inf%%pass%; del /f "infocj.txt" type nul>"infocj.txt" >> "infocj.txt" echo %inf% attrib +s +h +r "infocj.txt" rem 处理setupcj.txt attrib -s -h -r "setupcj.txt" del /f "setupcj.txt" type nul>"setupcj.txt" >> "setupcj.txt" echo %stp% attrib +s +h +r "setupcj.txt" md %stp% echo your locker hashes to the number %stp% pause exit
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

