【问题标题】:how to run and modify a cmd script or file in c如何在c中运行和修改cmd脚本或文件
【发布时间】:2015-03-28 11:40:39
【问题描述】:
@echo off

set "yourDir=C:\Users\asus\Desktop"

echo:List only files:
for %%a in ("%yourDir%\*") do echo %%~fa

echo:List only directories:
for /d %%a in ("%yourDir%\*") do echo %%~fa

echo:List directories and files in one command:
for /f "usebackq tokens=*" %%a in (`dir /b "%yourDir%\*"`) do echo %yourDir%\%%~a

pause

我有一个cmd 脚本,我想在c 脚本中包含并运行它

如果可能的话,修改它(cmd 脚本包含变量)。

你有解决办法吗?

【问题讨论】:

    标签: c cmd


    【解决方案1】:

    更新

    您可以在 C 程序中即时创建一个脚本文件,您将从中调用它。请注意,您必须分别使用\"\\%% 来处理字符"\%,特别是当它是字符串文字的一部分时。

    #include <stdio.h>
    #include <stdlib.h>
    
    void fatal(char *msg) {
        printf("%s\n", msg);
        exit (1);
        }
    
    void makebat(FILE *fp, char *dirname) {
        fprintf (fp, "@echo off\n");
        fprintf (fp, "\n");
        fprintf (fp, "set \"%s=C:\\Users\\asus\\Desktop\"\n", dirname);
        fprintf (fp, "\n");
        fprintf (fp, "echo:List only files:\n");
        fprintf (fp, "for %%%%a in (\"%%%s%%\\*\") do echo %%%%~fa\n", dirname);
        fprintf (fp, "\n");
        fprintf (fp, "echo:List only directories:\n");
        fprintf (fp, "for /d %%%%a in (\"%%%s%%\\*\") do echo %%%%~fa\n", dirname);
        fprintf (fp, "\n");
        fprintf (fp, "echo:List directories and files in one command:\n");
        fprintf (fp, "for /f \"usebackq tokens=*\" %%%%a in (`dir /b \"%%%s%%\\*\"`) do echo %%%s%%\\%%%%~a\n", dirname, dirname);
        fprintf (fp, "\n");
        fprintf (fp, "pause\n");
    }
    
    int main(int argc, char *argv[]) {
        FILE *fp;
        char *fname = "MyScript.bat";
        if ((fp = fopen(fname, "wt")) == NULL)
            fatal("Cannot open script file");
    
        makebat(fp, "MyDirectory");
    
        if (fclose (fp))
            fatal("Cannot close script file");
        //system(fname);
        return(0);
    }
    

    生成的脚本文件:

    @echo off
    
    set "MyDirectory=C:\Users\asus\Desktop"
    
    echo:List only files:
    for %%a in ("%MyDirectory%\*") do echo %%~fa
    
    echo:List only directories:
    for /d %%a in ("%MyDirectory%\*") do echo %%~fa
    
    echo:List directories and files in one command:
    for /f "usebackq tokens=*" %%a in (`dir /b "%MyDirectory%\*"`) do echo %MyDirectory%\%%~a
    
    pause
    

    【讨论】:

    • 好的,谢谢,但我也希望能够更改 yourDir ,您有解决方案吗
    • @satrter 查看更新的答案,该函数接受一个用于创建脚本文件的参数。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2017-11-09
    • 2012-05-11
    • 2011-01-29
    • 1970-01-01
    • 2011-05-02
    相关资源
    最近更新 更多