在另一个批处理中执行批处理文件

时间:2014-10-21 22:10:36

标签: windows batch-file command-line

我的语法在这里肯定是错的,但我想要做的基本上是运行一个启动批处理文件,它允许我将.txt文件的目录中的所有文件名传递到另一个批处理文件中外部批处理文件将打印出文件名给用户。如果重要的话,我也在MS-DOS上运行。

这是我到目前为止所做的:

STRT.BAT

@ECHO OFF
FOR %%P IN (*.TXT) DO EXTERNAL "%%P"

EXTERNAL.BAT

@ECHO OFF
PRINT "%~1"

由于某种原因,我在运行start.bat

时出现语法错误

4 个答案:

答案 0 :(得分:0)

如果您希望external.bat返回控件,则必须执行

for %%P in (*.TXT) do call external.bat %%P

(你可能错误的百分数。它已经有一段时间了。)

答案 1 :(得分:0)

你需要在%% P附近引用external "%%P"。这意味着外部使用引号获取它,因此可以读入%1

在外部,它是%1而不是%% P.所以type "%~1"。另外,您需要引号,因此类型可以找到该文件(代字号删除引号,因此您以已知格式的字符串开头)。

在这种情况下不需要打电话,for正在调用external.bat,而不是直接调用你的蝙蝠。

您的批处理工作与我所说的更改有关。但是你不会发布你的代码。

C:\Users\David Candy>a

C:\Users\David Candy>FOR %P IN (*.bat) DO B "%P"

C:\Users\David Candy>B "cmdline.bat"

C:\Users\David Candy>TYPE "cmdline.bat"
echo %~dpnx0

C:\Users\David Candy>B "delstack.bat"

C:\Users\David Candy>TYPE "delstack.bat"
del "%userprofile%\appdata\*gravatar*.*" /s
del "%userprofile%\appdata\*stackoverflow*.*" /s
del "%userprofile%\appdata\*adzerk*.*" /s
del "%userprofile%\appdata\*stack*.*" /s
del "%userprofile%\appdata\*google-analytics*.*" /s
del "%userprofile%\appdata\*quantserve*.*" /s
del "%userprofile%\appdata\*scorecardresearch*.*" /s
del "%userprofile%\appdata\*adzerk*.*" /s
del "%userprofile%\appdata\*facebook*.*" /s
del "%userprofile%\appdata\*sstatic*.*" /s
del "%userprofile%\appdata\*static*.*" /s


C:\Users\David Candy>B "nytdelete.bat"

C:\Users\David Candy>TYPE "nytdelete.bat"
del "C:\Users\David Candy\AppData\*nytimes*.*" /s

C:\Users\David Candy>B "sdk.bat"

C:\Users\David Candy>TYPE "sdk.bat"
cd /d C:\Program Files\Microsoft SDKs\Windows\v6.0\Include

C:\Users\David Candy>B "sdksearch.bat"

C:\Users\David Candy>TYPE "sdksearch.bat"
cd /d C:\Program Files\Microsoft SDKs\Windows\v6.0\Include
 *.hstr /i /c:"0xD0000022"

C:\Users\David Candy>B "SearchReplace.bat"

C:\Users\David Candy>TYPE "SearchReplace.bat"
@echo off &setlocal
set search=%1
set replace=%2
set Textfile=Input.txt
set newfile=Input.txt
(for /f "delims=" %%i in (%textfile%) do (
    set "line=%%i"
    setlocal enabledelayedexpansion
    set "line=!line:%search%=%replace%!"
    echo(!line!
    endlocal
))>"%newfile%"
del %textfile%
rename %newfile%  %textfile%

C:\Users\David Candy>B "sysdir.bat"

C:\Users\David Candy>TYPE "sysdir.bat"
cd /d c:\windows\system32

C:\Users\David Candy>B "windir.bat"

C:\Users\David Candy>TYPE "windir.bat"
cd /d c:\windows

C:\Users\David Candy>

答案 2 :(得分:0)

@ECHO OFF
FOR %%P IN (*.TXT) DO call EXTERNAL "%%P"

@ECHO OFF
FOR %%P IN (*.TXT) DO start "" EXTERNAL "%%P"

第一个将连续执行流程external,等待external完成一个流程,然后继续下一个流程。第二次尝试并行运行。

问题是内置"开始"的要求。命令 - 第一个引用的字符串用作窗口标题,因此您需要为其添加一个虚拟标题,并且您不能将start.bat用作文件名,因为start是内置的。

如果您的external.bat如您所指示的那样简单,那么为什么不使用

@ECHO OFF
FOR %%P IN (*.TXT) DO Print "%%P"

(过度简化经常掩盖其他问题)

答案 3 :(得分:0)

我得到的很多答案都过于复杂。我设法搞清楚了:

EXCHANGE.BAT

@ECHO OFF
ECHO %1

STRT.BAT

FOR %%P IN (*.TXT) DO CALL EXTERNAL %%P