C# 如何在c中使用批处理重命名文件#

C# 如何在c中使用批处理重命名文件#,c#,batch-file,C#,Batch File,我必须重命名服务器上的多个文件。为此,我在VisualStudio中制作了一个c#项目。(旁白:这个项目还需要做其他事情) 现在我尝试从该项目调用批处理文件。此批处理文件必须使用旧文件名和新文件名重命名文件 以下是批处理文件中的代码: @echo off set FILENAME_OLD="%~1" set FILENAME_NEW="%~nx2" ren %FILENAME_OLD% %FILENAME_NEW% set error=%errorlevel% echo %error%

我必须重命名服务器上的多个文件。为此,我在VisualStudio中制作了一个c#项目。(旁白:这个项目还需要做其他事情) 现在我尝试从该项目调用批处理文件。此批处理文件必须使用旧文件名和新文件名重命名文件

以下是批处理文件中的代码:

@echo off

set FILENAME_OLD="%~1"
set FILENAME_NEW="%~nx2"

ren %FILENAME_OLD% %FILENAME_NEW%
set error=%errorlevel%

echo %error%
这是我的c#项目中的代码:

结果我总是得到1分。这意味着“任”不起作用。我做错了什么

在我的c#项目中,文件名都是这样的结构:@“c:\test\test\test.bat”

编辑:

我更接近于一个解决方案。问题是我无法将双引号作为参数传递。我需要那些双引号,因为我的一些文件名包含空格。
如何将这些文件名正确地传递给该批处理文件

我用一种我认为“肮脏”的方式解决了这个问题:

//I changed newfilename so it's only the filename with extention and not the full path anymore.
string text = "\"" + oldfilename+ "\"" + " " + "\"" + newfilename;

System.IO.File.WriteAllText(@"c:\test\test.txt", text);

process.StartInfo.FileName = location;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
result = process.StandardOutput.ReadLine();
如您所见,我将参数写入一个txt文件,因此引号将被转义

batchfile现在非常简单,如下所示:

set /p arguments=<c:\test\test.txt
ren %arguments%
echo %errorlevel%

set/p arguments=为什么不直接在c#中使用
System.IO.File.Move()
?您需要查看实际的错误消息才能了解发生了什么。没有人能从你发布的内容中分辨出什么是错的。你的批处理脚本和C代码看起来不错。可能有许多问题与您正在使用的参数或文件本身有关。您的文件名是否包含空格?仅当文件名包含空格时,才需要在其周围加引号。我认为您应该使用单引号,而不是双引号。您是否具有重命名该文件的适当用户权限?也许可以尝试使用程序给定的相同参数从命令行调用批处理。我发现您在
newfilename
之后缺少一个结束引号(
“\”
set /p arguments=<c:\test\test.txt
ren %arguments%
echo %errorlevel%