Как переименовать файл с помощью пакета, используя Process в C # - PullRequest
0 голосов
/ 13 сентября 2018

Мне нужно переименовать несколько файлов на моем сервере. Для этого я делаю проект на C # в Visual Studio. (дополнительная информация: этот проект должен делать и другие вещи) Сейчас я пытаюсь вызвать командный файл из этого проекта. Этот пакетный файл должен переименовать файл, используя старое и новое имя файла.

Вот код из командного файла:

@echo off

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

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

echo %error%

Это код в моем проекте c #:

 process.StartInfo.FileName = location;
 process.StartInfo.Arguments = string.Format("\"{0}\" \"{1}\"", oldfilename, newfilename); 
 process.StartInfo.UseShellExecute = false;
 process.StartInfo.RedirectStandardOutput = true;
 process.Start();
 result = process.StandardOutput.ReadLine();

В результате я всегда получаю 1. Что означает, что «ren» не работает. Что я здесь не так делаю?

Все имена файлов имеют такую ​​структуру в моем проекте c #: @ "C: \ test \ test \ test.bat"

РЕДАКТИРОВАТЬ:

Я подошел несколько ближе к решению. Проблема заключалась в том, что я не могу передать двойные кавычки в качестве аргумента. Мне нужны эти двойные кавычки, так как некоторые из моих имен файлов содержат пробелы. Как правильно передать эти имена файлов в этот пакетный файл?

1 Ответ

0 голосов
/ 14 сентября 2018

Мне удалось решить проблему с помощью, на мой взгляд, «грязного» способа:

//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();

Как вы можете видеть, я записал аргументы в текстовый файл, чтобы кавычки были экранированы.

Пакетный файл теперь так прост:

set /p arguments=<c:\test\test.txt
ren %arguments%
echo %errorlevel%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...