我需要移动然后从磁盘上删除文件所在的目录。结构看起来像这样:在批处理脚本文件中命令rmdir无法正常工作
./Export
/Report_1
/12345
/something.pdf
/Report_2
...
我的代码如下所示:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
cd Export
for /D %%I in (%~dp0Export\*) do (
set "input=%%~nI"
for /f "tokens=2 delims=_" %%a in ("!input!") do (
md %~dp0new_reports\new_report_%%a
cd Report_%%a
for /R %%f in (*.pdf) do (
for %%S in (%%f) do (
if %%~zS NEQ "0" (
move %%f %~dp0new_reports\new_report_%%a
cd ..
set "id=%%a"
echo !id!
rmdir /S /Q "%~dp0Export\Report_!id!\"
)
)
)
)
)
@echo Finished ....
但命令rmdir仅删除与ID(/12345)的子文件夹,但REPORT_1文件夹仍然存在,但是空的。我试过echo “%〜dp0Export \ Report_!id!\”,它看起来没问题。
所以对剧本结构的结尾是这样的:
./Export
/Report_1
/Report_2
...
和我需要删除文件夹REPORT_1等,也是如此。
如果我复制命令到控制台它可以工作,但在批处理脚本中,它不工作,我需要。
这是Windows下的_batch_编程,而不是* nix系统上的_bash_编程。删除标签 – Inian
感谢您的编辑。我的错。 – Bulva
1.用cd/D“%〜dp0Export”替换'cd Export';用'pushd'替换'cd Report _ %% a' Report _ %%〜a“';在'for/R %% f'循环的关闭')'后面添加'popd';删除'cd ..'。 2.改变外循环:'for/D %% I in(“%〜dp0Export \ Report_ *”)do('。3.不需要'for %% S'循环,只需访问'%% 〜zf' 4.将变量'input'设置为'%%〜fI' 5.不定义变量'id',只需访问'%%〜a' 6.使用引号:'move“%%〜 f“”%〜dp0new_reports \ new_report _ %%〜a“'。7.更改'rmdir'命令行:'rmdir/S/Q”%〜dp0Export \ %%〜I“' – aschipfl