批处理脚本文件中的命令 rmdir 无法正常工作
Command rmdir in batch script file not working properly
我需要移动然后从磁盘中删除文件所在的目录。结构如下所示:
./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等等。
如果我复制命令到控制台,它可以工作,但在批处理脚本中,它不能按我需要的方式工作。
这样的东西适合你的目的吗?
@Echo Off
SetLocal EnableDelayedExpansion
PushD "%~dp0Export" 2>Nul||Exit/B
For /D %%I in (*) Do (Set "input=%%~nxI"
MD "new_reports\new_report_!input:*_=!"
For /F "Delims=" %%f In ('Dir/B/S/A-D "%%~nxI\*.pdf"') Do If %%~zf Neq 0 (
Move "%%f" "new_reports\new_report_!input:*_=!" && RD/S/Q "%%~nxI"))
Echo(Finished ....
Timeout -1
我现在已经在 Export 目录中创建了新目录,只是为了将所有内容放在一起。将两个位置的 "new_reports\new_report_!input:*_=!"
更改为 "%~dp0new_reports\new_report_!input:*_=!"
以更改为您喜欢的结构。
我需要移动然后从磁盘中删除文件所在的目录。结构如下所示:
./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等等。
如果我复制命令到控制台,它可以工作,但在批处理脚本中,它不能按我需要的方式工作。
这样的东西适合你的目的吗?
@Echo Off
SetLocal EnableDelayedExpansion
PushD "%~dp0Export" 2>Nul||Exit/B
For /D %%I in (*) Do (Set "input=%%~nxI"
MD "new_reports\new_report_!input:*_=!"
For /F "Delims=" %%f In ('Dir/B/S/A-D "%%~nxI\*.pdf"') Do If %%~zf Neq 0 (
Move "%%f" "new_reports\new_report_!input:*_=!" && RD/S/Q "%%~nxI"))
Echo(Finished ....
Timeout -1
我现在已经在 Export 目录中创建了新目录,只是为了将所有内容放在一起。将两个位置的 "new_reports\new_report_!input:*_=!"
更改为 "%~dp0new_reports\new_report_!input:*_=!"
以更改为您喜欢的结构。