【发布时间】:2018-01-09 11:51:28
【问题描述】:
我正在尝试使用多行循环但没有成功 - 代码似乎被炸毁了。我已经打开 EnableDelayedExpansion 但这似乎也没有帮助:-(代码似乎在“echo start for loop”之后退出。
任何为什么这不起作用的想法将不胜感激:-)
谢谢,海伦。
:: script to rename tv/radio folders with issue date.
@echo off
:: All vars set in this file will be local:
SETLOCAL
setlocal EnableDelayedExpansion
:SetDate
echo.
set /P NewDate=Please enter date to rename to (yymmdd) or "x" to exit:
echo.
echo new date = %NewDate%
:: Loop to user input until a character is entered:
if "%NewDate%"=="" GOTO Error
If "%NewDate%"=="x" GOTO Exit
:: User has entered a value so confirm it is correct.
GOTO ConfirmDate
:ConfirmDate
echo.
set /P Confirmation=Is this date correct? (y/n):
echo.
echo confirmation = %Confirmation%
if "%Confirmation%"=="y" GOTO RenameFolders
:: Else
GOTO SetDate
:RenameFolders
:: for each folder name containing "xxx", replace "xxx" with the new date
echo.
echo start for loop
for /D %%D in ("?xxx*") do (
set "PDIR=%%~fD" & set "NAME=%%~nxD"
echo check whether folder exists
if EXIST "!NAME:xxx=%NewDate%!" (
echo.
echo folders already exist! - remove them and try again!
GOTO :End
) ELSE (
move "!PDIR!" "!NAME:xxx=%NewDate%!"
)
)
echo.
echo Folder rename is complete. Thank you.
GOTO End
:Error
echo.
echo You did not enter a date!!
GOTO SetDate
:Exit
echo.
echo User requested exit, bye bye!
GOTO End
:End
::Remember to end command for local vars:
ENDLOCAL
:: exit script
【问题讨论】:
-
为什么不用“暂停”来帮助调试呢?无论如何,我认为上面没有错误。
-
谢谢,万森特。但是,它绝对不会运行 for 循环代码,因为我从未到达“回显检查文件夹是否存在”这一行 :-( 我只能假设这是由于 for 循环的复杂性造成的?
-
代码应该做什么以及它实际做什么?您告诉我们的越多,就越容易帮助您...
-
好的,它应该做的是:for 循环应该搜索包含字符串“xxx”的所有文件夹,并将其替换为用户在脚本前面提供的日期。在尝试使用“移动”命令重命名文件夹之前,for 循环应检查新文件夹名称是否已经存在,如果存在,则退出脚本。如果它不存在,则应使用移动命令重命名文件夹。实际发生的情况:脚本落在“echo start for loop”和“echo check if folder是否存在”之间的某个地方
-
我的方法是从循环中删除整个
if..else命令,并将`echo %%D` 作为for的第一行。这可能会揭示哪些语句导致了问题。我也会使用像editplus这样的适当文本编辑器,因为使用 WP 会造成严重破坏。无论如何,请确保将批处理文件保存为 ASCII,而不是 unicode。遗憾的是,如果没有目标目录的列表,我们将无法重现您的症状。代码似乎没问题。
标签: windows batch-file