win7在batch文件中使用语句cd /d %~dp0读取当前路径

本文详细解释了批处理命令行中的cd/d%~dp0指令,通过实例说明了该指令如何帮助用户将当前工作目录切换至批处理文件所在目录,便于理解和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出处: http://hi.baidu.com/fenxijia/item/44acf9269163b3c9a4275aff

cd /d %~dp0 含义

这句的意思是 更改当前目录为批处理本身的目录 有些晕吧?不急,我举例 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd /d %~dp0 在这里 cd /d %~dp0的意思就是cd /d d:\qq %0代表批处理本身 d:\qq\a.bat ~dp是变量扩充 d既是扩充到分区号 d: p就是扩充到路径 \qq dp就是扩充到分区号路径 d:\qq 现在明白了吧? 如果还有什么不明白就去非常批处理论坛,我是提问区斑竹 地址:bbs.verybat.cn

 

 

@echo off rem @echo %cd% rem @echo %~d0 rem @echo %~dp0 rem @echo %~df0 set MD_BOOT_HOME=%~dp0 set CONFIG_ROOT=%MD_BOOT_HOME%server\config\platform set LIBS_ROOT=%MD_BOOT_HOME%server\runtime rem set JAVA_HOME_PR=%~dp0jstack echo MD_BOOT_HOME: %MD_BOOT_HOME% echo %1 echo %2 set MD_BOOT_ARCH=%PROCESSOR_ARCHITECTURE% rem @echo %MD_BOOT_ARCH% set MD_BOOT_OS_KERNEL=win rem @echo %MD_BOOT_OS_KERNEL% @REM ==== START VALIDATION ==== if not "%JAVA_HOME%" == "" goto OkJHome echo. echo Error: JAVA_HOME not found in your environment. >&2 echo Please set the JAVA_HOME variable in your environment to match the >&2 echo location of your Java installation. >&2 echo. goto error :error set ERROR_CODE=1 @REM Set JAVA_HOME=%JAVA_HOME_PR%\runtime\java\%MD_BOOT_ARCH%-%MD_BOOT_OS_KERNEL% :OkJHome echo Checking java home: %JAVA_HOME% if exist "%JAVA_HOME%\bin\java.exe" goto doJob :doJob @setlocal enabledelayedexpansion for /r "%MD_BOOT_HOME%\" %%k in (lcm-metadata-shell*.jar) do ( @set MD_BOOTSTRAP="%%k" ) for /r "%MD_BOOT_HOME%\server\platform\dev\main" %%k in (*.jar) do set MAIN_JAR=%%k echo Checking MD bootstrap: %MD_BOOTSTRAP% echo "%JAVA_HOME%\bin\java" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar %MD_BOOTSTRAP% %* "%JAVA_HOME%\bin\java" ^ -Dloader.path="%MD_BOOT_HOME%server\platform\common;%LIBS_ROOT%/libs;%LIBS_ROOT%/3rd" ^ -Dspring.config.additional-location="%CONFIG_ROOT%\common\;%CONFIG_ROOT%\dev\" ^ -jar %MD_BOOTSTRAP% %* pause接上一个提问,这样改之后可以了吗
03-08
@echo off setlocal enabledelayedexpansion chcp 65001 >nul title ApacheBlockPerMin :: ------------------------------------------------------------ :: 运行日志(与脚本同目录 debug.log) set "debugLog=%~dp0debug.log" :: ========== 配置 ========== set "logDir=C:\xampp\apache\logs" set "threshold=10" set "scanInterval=60" set "blockList=C:\Users\Administrator\Desktop\blocked_ips.txt" :: ========================== :loop echo [%date% %time%] ===== loop ===== echo [%date% %time%] ===== loop ===== >> "%debugLog%" :: ---------- 检查管理员 ---------- net session >nul 2>&1 || ( echo [ERR] 需要以管理员身份运行 echo [%date% %time%] [ERR] 需要以管理员身份运行 >> "%debugLog%" pause exit /b 1 ) :: ---------- 确定日志文件 ---------- set "logFile=%logDir%\access.log" if exist "%logDir%\access_log.%date:~0,4%-%date:~5,2%-%date:~8,2%.log" ( set "logFile=%logDir%\access_log.%date:~0,4%-%date:~5,2%-%date:~8,2%.log" ) echo [%date% %time%] [INFO] 使用日志文件: %logFile% echo [%date% %time%] [INFO] 使用日志文件: %logFile% >> "%debugLog%" :: ---------- 生成上一分钟键(中文月份,适用于 CLF 格式) ---------- for /f %%t in ('powershell -NoLogo -NoProfile -Command ^ "$culture = New-Object System.Globalization.CultureInfo('zh-CN'); ^ (Get-Date).AddMinutes(-1).ToString(''dd/MMM/yyyy:HH:mm'', $culture)"') do ( set "minStr=%%t" ) echo [%date% %time%] [INFO] 扫描上一分钟 minStr=!minStr! echo [%date% %time%] [INFO] 扫描上一分钟 minStr=!minStr! >> "%debugLog%" :: ---------- 清空计数器 ---------- for /f "delims==" %%i in ('set found 2^>nul') do set "%%i=" :: ---------- 扫描日志 ---------- echo [%date% %time%] [DEBUG] 开始扫描日志文件: %logFile% echo [%date% %time%] [DEBUG] 开始扫描日志文件: %logFile% >> "%debugLog%" :: 用 findstr 先筛出可能的行,再用 for /f 逐行读取 findstr /r /c:"^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]* .*\[[0-9][0-9]/[A-Za-z][a-z][a-z]/[0-9][0-9][0-9][0-9]:[0-9][0-9]:[0-9][0-9] \+[0-9][0-9][0-9][0-9]\]" "%logFile%" 2>nul | for /f "tokens=1,4 delims=[]:" %%a in ('more') do ( set "ip=%%a" set "ts=%%b" set "ts=!ts:~0,11!" if /i "!ts!"=="!minStr!" ( echo [DEBUG] 匹配成功 IP=!ip! 时间=!ts! echo [%date% %time%] [DEBUG] 匹配成功 IP=!ip! 时间=!ts! >> "%debugLog%" set /a found[!ip!]+=1 ) ) echo [%date% %time%] [DEBUG] 日志扫描完成 echo [%date% %time%] [DEBUG] 日志扫描完成 >> "%debugLog%" :: 输出匹配结果用于调试 for /f "tokens=1,2 delims==" %%i in ('set found 2^>nul') do ( echo [DEBUG] IP=%%i 计数=%%j echo [%date% %time%] [DEBUG] IP=%%i 计数=%%j >> "%debugLog%" ) :: ---------- 封禁 ---------- for /f "tokens=1,2 delims==" %%i in ('set found 2^>nul') do ( set "ip=%%i" set "cnt=%%j" if !cnt! geq %threshold% ( echo [%date% %time%] [ACTION] 封禁 !ip! !cnt!/min echo [%date% %time%] [ACTION] 封禁 !ip! !cnt!/min >> "%debugLog%" netsh advfirewall firewall show rule name="Block_!ip!" | findstr /i "规则名称" >nul if errorlevel 1 ( netsh advfirewall firewall add rule name="Block_!ip!" dir=in action=block remoteip=!ip! >nul if !errorlevel! neq 0 ( echo [%date% %time%] [ERR] 添加防火墙规则失败 echo [%date% %time%] [ERR] 添加防火墙规则失败 >> "%debugLog%" ) else ( echo !ip! >> "%blockList%" schtasks /create /sc once /st 23:59 /tn "Unblock_!ip!" ^ /tr "netsh advfirewall firewall delete rule name='Block_!ip!'" /f >nul if !errorlevel! neq 0 ( echo [%date% %time%] [ERR] 创建任务计划失败 echo [%date% %time%] [ERR] 创建任务计划失败 >> "%debugLog%" ) ) ) ) ) echo [%date% %time%] [DEBUG] 封禁操作完成 echo [%date% %time%] [DEBUG] 封禁操作完成 >> "%debugLog%" timeout /t %scanInterval% /nobreak >nul goto :loop 闪退
最新发布
07-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值