因此,我尝试从预制的批处理文件创建批处理文件,但我不知道如何在不破坏文件的情况下转到文件中的下一行,它只是说明我希望命令执行的操作。这是我目前所拥有的。
@echo off
:batch
cd C:\
cd Users
cd User1
cd Desktop
cd test10
type nul > test10.bat
echo Ipconfig /all
之后,Ipconfig /all
它会像平常一样运行命令,但如果我尝试这样做
@echo off
:batch
cd C:\
cd Users
cd User1
cd Desktop
cd test10
type nul > test10.bat
echo Ipconfig /all > test10.bat
echo PAUSE > test10.bat
如果我这样做,它只会说“暂停”
这是我用来制作第二个批处理文件的当前代码
那么有人可以帮我解决这个问题吗?
答案1
你应该>>
使用>
当使用>
写入文件时,您将覆盖文件的所有内容。
当使用时>>
,您将把数据附加到现有文件。
你的代码看起来应该是这样的:
@echo off
:batch
cd C:\
cd Users
cd User1
cd Desktop
cd test10
type nul > test10.bat
echo Ipconfig /all > test10.bat
echo PAUSE >> test10.bat
答案2
你的cd
命令必须包含/D
,这意味着,去/D
河流......
/D
如果在命令中不使用标志cd
,cmd.exe(命令行解释器)将不会转到驱动C:
器,如果cd
没有转到,当 bat 在同一驱动器上运行时,它可能不会错误地运行(C:
),但是当你的 bat 在除 之外的驱动器上运行时C:
,你的 batTest10.bat
将在当前/运行文件夹中创建,而不是在所需/指向的文件夹中。
假设bat运行的文件夹中没有Users\User1\Desktop\test10
文件夹,所有cd命令都会报错...
I:\>cd C:\
I:\>cd Users
The system cannot find the path specified.
I:\>cd User1
The system cannot find the path specified.
I:\>cd Desktop
The system cannot find the path specified.
I:\>cd test10
The system cannot find the path specified.
I:\>
您可以使用一种更精确/更简单的方法来做到这一点......
@echo off
:batch
cd /d "C:\Users\User1\Desktop\test10\" && (
echo Ipconfig /all
echo PAUSE ) >.\test10.bat
- 您还可以替换:
cd /d C:\Users\User1\Desktop\test10\ ... >test10.bat
到:
> "%USERPROFILE%\Desktop\test10\test10.bat
“:
@echo off
:batch
> "%USERPROFILE%\Desktop\test10\test10.bat" (
echo\ Ipconfig /all
echo\ PAUSE
)
观察:1但请记住,某些字符可能需要额外的转义才能用于某些命令、重定向器、操作符等......
^| ^| ^| ^& ^&^& ^> ^>^> ^< ^<^< %% ^( ^)
echo timeout 3 >nul
→ echo timeout 3 ^>nul
echo cd /d "%USERPROFILE%\Desktop\test10\test10.bat" 2>nul || pause
→ echo cd /d "%%USERPROFILE%%\Desktop\test10\test10.bat" 2^>nul ^|^| pause
echo cd /d "%USERPROFILE%\Desktop\test10\test10.bat" 2>nul && (
→ echo cd /d "%%USERPROFILE%%\Desktop\test10\test10.bat" 2^>nul ^&^& ^(
echo Ipconfig /all 2>nul || echo\ error Ipconfig command...
→ echo Ipconfig /all 2^>nul ^|^| echo\ error Ipconfig command...
观察:2还有另一种方法可以在运行时生成一个不转义、不扩展变量值、也不使用 echo 的 bat :参见此答案