我想编写一个批处理脚本,该脚本会将子目录中的“ am_test.txt”复制到新路径,但是我在更改for循环中的路径时遇到了困难。在我的批处理脚本中,以下行不起作用“ cd!temp!\ testdata”。谁能告诉我原因:
@echo off
setlocal enabledelayedexpansion
goto:main
goto:eof
:main
setlocal
for /d %%x in (*) DO (
set temp=%%~fx
echo !temp!
cd !temp!\testdata
copy am_test*.txt E:\Work_folder
)
endlocal
答案 0 :(得分:0)
这是一种执行代码似乎打算执行的操作的方式。
作为批处理文件:
@For /D %%A In (*) Do @If Exist "%%A\testdata\am_test*.txt" Copy "%%A\testdata\am_test*.txt" "E:\Work_folder">Nul
在命令提示符处:
For /D %A In (*) Do @If Exist "%A\testdata\am_test*.txt" Copy "%A\testdata\am_test*.txt" "E:\Work_folder">Nul
无论哪种情况,E:\Work_folder
必须存在。
答案 1 :(得分:0)
@echo off
setlocal enabledelayedexpansion
rem pushd popd
for /d %%x in (*) do (echo ---& echo fx: "%%~fx") & (pushd "%%x") && (echo cd: "!cd!") & popd
rem cd
for /d %%x in (*) do (echo ---& echo fx: "%%~fx") & (cd "%%x") & echo cd: "!cd!"
exit /b
要了解导致问题的原因,请创建一个脚本 这样做虽然可以解决问题,但效果相似。上面的代码 显示类似的问题。
在驱动器Z:
中创建的文件夹,其名称分别为a
,b
和c
。
脚本输出为
---
fx: "Z:\a"
cd: "Z:\a"
---
fx: "Z:\b"
cd: "Z:\b"
---
fx: "Z:\c"
cd: "Z:\c"
---
fx: "Z:\a"
cd: "Z:\a"
---
fx: "Z:\a\b"
The system cannot find the path specified.
cd: "Z:\a"
---
fx: "Z:\a\c"
The system cannot find the path specified.
cd: "Z:\a"
pushd
和popd
成功并且看起来正确。
当前目录将在下一次迭代之前恢复。
cd
以a
成功,但以b
和c
失败。
该失败基于更改时迭代*
文件夹
循环中的目录,而不还原它。
由于返回的文件夹是相对于初始当前目录的相对名称,
%%~fx
的路径可能无效,因为系统正在使用完整的
当前目录的路径,并带有迭代的文件夹名称。