使用chdir

时间:2016-01-12 15:11:48

标签: windows batch-file

确定。我有这个批处理文件,旨在从文件夹内删除可能存在或不存在的每个文件和文件夹。基本结构如下:

@echo off
If EXIST c:\MyDirectory\(
chdir c:\MyDirectory\

echo %CD%
echo %0
echo %~dp0

rem ... This removes everything from the folder....
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

回声的原因我希望能够确保批处理脚本实际上已经改变了MyDirectory的路径,并且正在删除正确的文件(我们之前发生过一次事件,我很喜欢脚本没有更改路径并从我们的某个文档文件夹中删除所有内容的热水。

回声返回批处理文件本身的名称或批处理文件的运行路径,而不是" c:\ MyDirectory \"。所以在我的情况下,它来自c:\ Testing \(我创建的一个虚拟目录,以避免第二次oops)。

有没有办法从批处理脚本中获取当前活动目录,这样我就可以验证我即将要清空的目录?

2 个答案:

答案 0 :(得分:0)

试试这个:

@echo off
setlocal EnableDelayedExpansion
If EXIST c:\MyDirectory\(
chdir c:\MyDirectory\

echo !CD!
pause

rem ... This removes everything from the folder....
for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

由于您使用的是if语句,因此您应使用setlocal EnableDelayedExpansion并使用!代替%作为变量。

答案 1 :(得分:0)

要核对目录的内容,请使用此shell脚本(批处理文件):

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal